diff --git a/main.c b/main.c index 19af0ed..6028790 100644 --- a/main.c +++ b/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