|
|
|
@ -49,3 +49,145 @@ get_rot_matrix(enum Rotation rot, math::Matrix<3,3> *rot_matrix)
@@ -49,3 +49,145 @@ get_rot_matrix(enum Rotation rot, math::Matrix<3,3> *rot_matrix)
|
|
|
|
|
|
|
|
|
|
rot_matrix->from_euler(roll, pitch, yaw); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define HALF_SQRT_2 0.70710678118654757f |
|
|
|
|
|
|
|
|
|
__EXPORT void |
|
|
|
|
rotate_3f(enum Rotation rot, float &x, float &y, float &z) |
|
|
|
|
{ |
|
|
|
|
float tmp; |
|
|
|
|
switch (rot) { |
|
|
|
|
case ROTATION_NONE: |
|
|
|
|
case ROTATION_MAX: |
|
|
|
|
return; |
|
|
|
|
case ROTATION_YAW_45: { |
|
|
|
|
tmp = HALF_SQRT_2*(x - y); |
|
|
|
|
y = HALF_SQRT_2*(x + y); |
|
|
|
|
x = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_YAW_90: { |
|
|
|
|
tmp = x; x = -y; y = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_YAW_135: { |
|
|
|
|
tmp = -HALF_SQRT_2*(x + y); |
|
|
|
|
y = HALF_SQRT_2*(x - y); |
|
|
|
|
x = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_YAW_180: |
|
|
|
|
x = -x; y = -y; |
|
|
|
|
return; |
|
|
|
|
case ROTATION_YAW_225: { |
|
|
|
|
tmp = HALF_SQRT_2*(y - x); |
|
|
|
|
y = -HALF_SQRT_2*(x + y); |
|
|
|
|
x = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_YAW_270: { |
|
|
|
|
tmp = x; x = y; y = -tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_YAW_315: { |
|
|
|
|
tmp = HALF_SQRT_2*(x + y); |
|
|
|
|
y = HALF_SQRT_2*(y - x); |
|
|
|
|
x = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_180: { |
|
|
|
|
y = -y; z = -z; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_180_YAW_45: { |
|
|
|
|
tmp = HALF_SQRT_2*(x + y); |
|
|
|
|
y = HALF_SQRT_2*(x - y); |
|
|
|
|
x = tmp; z = -z; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_180_YAW_90: { |
|
|
|
|
tmp = x; x = y; y = tmp; z = -z; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_180_YAW_135: { |
|
|
|
|
tmp = HALF_SQRT_2*(y - x); |
|
|
|
|
y = HALF_SQRT_2*(y + x); |
|
|
|
|
x = tmp; z = -z; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_PITCH_180: { |
|
|
|
|
x = -x; z = -z; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_180_YAW_225: { |
|
|
|
|
tmp = -HALF_SQRT_2*(x + y); |
|
|
|
|
y = HALF_SQRT_2*(y - x); |
|
|
|
|
x = tmp; z = -z; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_180_YAW_270: { |
|
|
|
|
tmp = x; x = -y; y = -tmp; z = -z; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_180_YAW_315: { |
|
|
|
|
tmp = HALF_SQRT_2*(x - y); |
|
|
|
|
y = -HALF_SQRT_2*(x + y); |
|
|
|
|
x = tmp; z = -z; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_90: { |
|
|
|
|
tmp = z; z = y; y = -tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_90_YAW_45: { |
|
|
|
|
tmp = z; z = y; y = -tmp; |
|
|
|
|
tmp = HALF_SQRT_2*(x - y); |
|
|
|
|
y = HALF_SQRT_2*(x + y); |
|
|
|
|
x = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_90_YAW_90: { |
|
|
|
|
tmp = z; z = y; y = -tmp; |
|
|
|
|
tmp = x; x = -y; y = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_90_YAW_135: { |
|
|
|
|
tmp = z; z = y; y = -tmp; |
|
|
|
|
tmp = -HALF_SQRT_2*(x + y); |
|
|
|
|
y = HALF_SQRT_2*(x - y); |
|
|
|
|
x = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_270: { |
|
|
|
|
tmp = z; z = -y; y = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_270_YAW_45: { |
|
|
|
|
tmp = z; z = -y; y = tmp; |
|
|
|
|
tmp = HALF_SQRT_2*(x - y); |
|
|
|
|
y = HALF_SQRT_2*(x + y); |
|
|
|
|
x = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_270_YAW_90: { |
|
|
|
|
tmp = z; z = -y; y = tmp; |
|
|
|
|
tmp = x; x = -y; y = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_ROLL_270_YAW_135: { |
|
|
|
|
tmp = z; z = -y; y = tmp; |
|
|
|
|
tmp = -HALF_SQRT_2*(x + y); |
|
|
|
|
y = HALF_SQRT_2*(x - y); |
|
|
|
|
x = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_PITCH_90: { |
|
|
|
|
tmp = z; z = -x; x = tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
case ROTATION_PITCH_270: { |
|
|
|
|
tmp = z; z = x; x = -tmp; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|