add angle_to_mat2 utility function.

This commit is contained in:
2013-09-10 20:45:47 +00:00
parent 734eaab545
commit ab8d88ac18
3 changed files with 18 additions and 10 deletions

View File

@@ -104,7 +104,8 @@ void quat_to_axis_angle(float axis[3], float *angle, const float q[4]);
void mat3_to_axis_angle(float axis[3], float *angle, float M[3][3]);
void mat4_to_axis_angle(float axis[3], float *angle, float M[4][4]);
void single_axis_angle_to_mat3(float R[3][3], const char axis, const float angle);
void axis_angle_to_mat3_single(float R[3][3], const char axis, const float angle);
void angle_to_mat2(float R[2][2], const float angle);
/******************************** XYZ Eulers *********************************/

View File

@@ -817,7 +817,8 @@ void mat4_to_axis_angle(float axis[3], float *angle, float mat[4][4])
quat_to_axis_angle(axis, angle, q);
}
void single_axis_angle_to_mat3(float mat[3][3], const char axis, const float angle)
/* rotation matrix from a single axis */
void axis_angle_to_mat3_single(float mat[3][3], const char axis, const float angle)
{
const float angle_cos = cosf(angle);
const float angle_sin = sinf(angle);
@@ -862,6 +863,18 @@ void single_axis_angle_to_mat3(float mat[3][3], const char axis, const float ang
}
}
void angle_to_mat2(float mat[2][2], const float angle)
{
const float angle_cos = cosf(angle);
const float angle_sin = sinf(angle);
/* 2D rotation matrix */
mat[0][0] = angle_cos;
mat[0][1] = angle_sin;
mat[1][0] = -angle_sin;
mat[1][1] = angle_cos;
}
/******************************** XYZ Eulers *********************************/
/* XYZ order */

View File

@@ -522,18 +522,12 @@ static PyObject *C_Matrix_Rotation(PyObject *cls, PyObject *args)
axis_angle_to_mat3((float (*)[3])mat, tvec, angle);
}
else if (matSize == 2) {
const float angle_cos = cosf(angle);
const float angle_sin = sinf(angle);
angle_to_mat2((float (*)[2])mat, angle);
/* 2D rotation matrix */
mat[0] = angle_cos;
mat[1] = angle_sin;
mat[2] = -angle_sin;
mat[3] = angle_cos;
}
else {
/* valid axis checked above */
single_axis_angle_to_mat3((float (*)[3])mat, axis[0], angle);
axis_angle_to_mat3_single((float (*)[3])mat, axis[0], angle);
}
if (matSize == 4) {