improper euler
This commit is contained in:
parent
ca9f2d4c03
commit
52158d293e
1 changed files with 28 additions and 32 deletions
60
main.c
60
main.c
|
@ -22,8 +22,8 @@
|
|||
#define ACTION_STEP 0.1
|
||||
|
||||
#define PITCH_STEP 0.08
|
||||
#define ROLL_STEP 0.00
|
||||
#define YAW_STEP 0.01
|
||||
#define ROLL_STEP 0.05
|
||||
#define YAW_STEP 0.05
|
||||
|
||||
#define K1 100
|
||||
#define K2 50
|
||||
|
@ -69,23 +69,23 @@ static struct termios originalTerm = {};
|
|||
|
||||
double calcX(double x, double y, double z){
|
||||
return
|
||||
x * Angle.cosA * Angle.cosB +
|
||||
y * Angle.sinA * Angle.cosB
|
||||
x * Angle.cosC * Angle.cosB +
|
||||
y * Angle.sinC * Angle.cosB
|
||||
-z * Angle.sinB;
|
||||
}
|
||||
|
||||
double calcY(double x, double y, double z){
|
||||
return
|
||||
x * (Angle.cosA * Angle.sinB * Angle.sinC - Angle.sinA * Angle.cosC) +
|
||||
y * (Angle.sinA * Angle.sinB * Angle.sinC + Angle.cosA * Angle.cosC) +
|
||||
z * Angle.cosB * Angle.sinC;
|
||||
x * (Angle.cosC * Angle.sinB * Angle.sinA - Angle.sinC * Angle.cosA) +
|
||||
y * (Angle.sinC * Angle.sinB * Angle.sinA + Angle.cosC * Angle.cosA) +
|
||||
z * Angle.cosB * Angle.sinA;
|
||||
}
|
||||
|
||||
double calcZ(double x, double y, double z){
|
||||
return
|
||||
x * (Angle.cosA * Angle.sinB * Angle.cosC + Angle.sinA * Angle.sinC) +
|
||||
y * (Angle.sinA * Angle.sinB * Angle.cosC - Angle.cosA * Angle.sinC) +
|
||||
z * Angle.cosB * Angle.cosC;
|
||||
x * (Angle.cosC * Angle.sinB * Angle.cosA + Angle.sinC * Angle.sinA) +
|
||||
y * (Angle.sinC * Angle.sinB * Angle.cosA - Angle.cosC * Angle.sinA) +
|
||||
z * Angle.cosB * Angle.cosA;
|
||||
}
|
||||
|
||||
void calcAngle(){
|
||||
|
@ -164,20 +164,16 @@ void handleAngle(char *input) {
|
|||
Angle.currentTarget = *input;
|
||||
switch (*input) {
|
||||
case 'W':
|
||||
Angle.CTarget -= M_PI_2;
|
||||
// pitch angle +pi/2
|
||||
Angle.ATarget = Angle.A - M_PI_2;
|
||||
break;
|
||||
case 'A':
|
||||
// yaw angle -pi/2
|
||||
Angle.BTarget -= M_PI_2;
|
||||
Angle.BTarget = Angle.B + M_PI_2;
|
||||
break;
|
||||
case 'S':
|
||||
// pitch angle -pi/2
|
||||
Angle.CTarget += M_PI_2;
|
||||
Angle.ATarget = Angle.A + M_PI_2;
|
||||
break;
|
||||
case 'D':
|
||||
// yaw angle +pi/2
|
||||
Angle.BTarget += M_PI_2;
|
||||
Angle.BTarget = Angle.B - M_PI_2;
|
||||
break;
|
||||
default:
|
||||
Angle.currentTarget = 0;
|
||||
|
@ -185,28 +181,28 @@ void handleAngle(char *input) {
|
|||
|
||||
// idle animation
|
||||
//Angle.A += ROLL_STEP;
|
||||
//Angle.B += YAW_STEP;
|
||||
Angle.B += YAW_STEP;
|
||||
//Angle.C += PITCH_STEP;
|
||||
}
|
||||
|
||||
else
|
||||
switch(Angle.currentTarget) {
|
||||
case 'W':
|
||||
Angle.C -= ACTION_STEP;
|
||||
if (Angle.C <= Angle.CTarget) RESET_C_ANGLE(*input);
|
||||
Angle.A -= ACTION_STEP;
|
||||
if (Angle.A <= Angle.ATarget) RESET_A_ANGLE(*input);
|
||||
break;
|
||||
case 'A':
|
||||
Angle.B -= ACTION_STEP;
|
||||
if (Angle.B <= Angle.BTarget) RESET_B_ANGLE(*input);
|
||||
break;
|
||||
case 'S':
|
||||
Angle.C += ACTION_STEP;
|
||||
if (Angle.C >= Angle.CTarget) RESET_C_ANGLE(*input);
|
||||
break;
|
||||
case 'D':
|
||||
Angle.B += ACTION_STEP;
|
||||
if (Angle.B >= Angle.BTarget) RESET_B_ANGLE(*input);
|
||||
break;
|
||||
case 'S':
|
||||
Angle.A += ACTION_STEP;
|
||||
if (Angle.A >= Angle.ATarget) RESET_A_ANGLE(*input);
|
||||
break;
|
||||
case 'D':
|
||||
Angle.B -= ACTION_STEP;
|
||||
if (Angle.B <= Angle.BTarget) RESET_B_ANGLE(*input);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -258,11 +254,11 @@ int main(){
|
|||
memset(output, ' ', SCREEN_WIDTH * SCREEN_HEIGHT);
|
||||
memset(zBuffer, 0, SCREEN_WIDTH * SCREEN_HEIGHT * sizeof(double));
|
||||
|
||||
for(double cubeX = -CUBE_WIDTH ; cubeX < CUBE_WIDTH ; cubeX += STEP) {
|
||||
for(double cubeY = -CUBE_WIDTH ; cubeY < CUBE_WIDTH ; cubeY += STEP) {
|
||||
for(double cubeX = -CUBE_WIDTH + STEP ; cubeX < CUBE_WIDTH - STEP ; cubeX += STEP) {
|
||||
for(double cubeY = -CUBE_WIDTH + STEP ; cubeY < CUBE_WIDTH - STEP ; cubeY += STEP) {
|
||||
rotateCube(cubeX, cubeY, -CUBE_WIDTH, FACE_FRONT);//front
|
||||
rotateCube(cubeX, cubeY, CUBE_WIDTH, FACE_BACK);//back
|
||||
rotateCube(CUBE_WIDTH, -cubeX, cubeY, FACE_RIGHT);//right
|
||||
rotateCube(CUBE_WIDTH, cubeX, cubeY, FACE_RIGHT);//right
|
||||
rotateCube(-CUBE_WIDTH, cubeX, cubeY, FACE_LEFT);//left
|
||||
rotateCube(cubeX, CUBE_WIDTH, cubeY, FACE_BOTTOM);//bottom
|
||||
rotateCube(cubeX, -CUBE_WIDTH, cubeY, FACE_TOP);//top
|
||||
|
|
Loading…
Add table
Reference in a new issue