[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40352] trunk/blender/source/blender: Move function out of mathutils to: BLI_math_rotation --- single_axis_angle_to_mat3(mat3, axis, angle), copied out from mathutils, axis arg is a char 'X/Y/Z' rather then a vector like axis_angle_to_mat3().
Campbell Barton
ideasman42 at gmail.com
Mon Sep 19 15:08:01 CEST 2011
Revision: 40352
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40352
Author: campbellbarton
Date: 2011-09-19 13:08:01 +0000 (Mon, 19 Sep 2011)
Log Message:
-----------
Move function out of mathutils to: BLI_math_rotation --- single_axis_angle_to_mat3(mat3, axis, angle), copied out from mathutils, axis arg is a char 'X/Y/Z' rather then a vector like axis_angle_to_mat3().
Modified Paths:
--------------
trunk/blender/source/blender/blenlib/BLI_math_rotation.h
trunk/blender/source/blender/blenlib/intern/math_rotation.c
trunk/blender/source/blender/python/mathutils/mathutils_Matrix.c
Modified: trunk/blender/source/blender/blenlib/BLI_math_rotation.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_math_rotation.h 2011-09-19 12:26:20 UTC (rev 40351)
+++ trunk/blender/source/blender/blenlib/BLI_math_rotation.h 2011-09-19 13:08:01 UTC (rev 40352)
@@ -102,6 +102,8 @@
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);
+
/****************************** Vector/Rotation ******************************/
/* old axis angle code */
/* TODO: the following calls should probably be depreceated sometime */
Modified: trunk/blender/source/blender/blenlib/intern/math_rotation.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/math_rotation.c 2011-09-19 12:26:20 UTC (rev 40351)
+++ trunk/blender/source/blender/blenlib/intern/math_rotation.c 2011-09-19 13:08:01 UTC (rev 40352)
@@ -771,6 +771,52 @@
quat_to_axis_angle(axis, angle,q);
}
+
+
+void single_axis_angle_to_mat3(float mat[3][3], const char axis, const float angle)
+{
+ const float angle_cos= cosf(angle);
+ const float angle_sin= sinf(angle);
+
+ switch(axis) {
+ case 'X': /* rotation around X */
+ mat[0][0] = 1.0f;
+ mat[0][1] = 0.0f;
+ mat[0][2] = 0.0f;
+ mat[1][0] = 0.0f;
+ mat[1][1] = angle_cos;
+ mat[1][2] = angle_sin;
+ mat[2][0] = 0.0f;
+ mat[2][1] = -angle_sin;
+ mat[2][2] = angle_cos;
+ break;
+ case 'Y': /* rotation around Y */
+ mat[0][0] = angle_cos;
+ mat[0][1] = 0.0f;
+ mat[0][2] = -angle_sin;
+ mat[1][0] = 0.0f;
+ mat[1][1] = 1.0f;
+ mat[1][2] = 0.0f;
+ mat[2][0] = angle_sin;
+ mat[2][1] = 0.0f;
+ mat[2][2] = angle_cos;
+ break;
+ case 'Z': /* rotation around Z */
+ mat[0][0] = angle_cos;
+ mat[0][1] = angle_sin;
+ mat[0][2] = 0.0f;
+ mat[1][0] = -angle_sin;
+ mat[1][1] = angle_cos;
+ mat[1][2] = 0.0f;
+ mat[2][0] = 0.0f;
+ mat[2][1] = 0.0f;
+ mat[2][2] = 1.0f;
+ break;
+ default:
+ assert("invalid axis");
+ }
+}
+
/****************************** Vector/Rotation ******************************/
/* TODO: the following calls should probably be depreceated sometime */
Modified: trunk/blender/source/blender/python/mathutils/mathutils_Matrix.c
===================================================================
--- trunk/blender/source/blender/python/mathutils/mathutils_Matrix.c 2011-09-19 12:26:20 UTC (rev 40351)
+++ trunk/blender/source/blender/python/mathutils/mathutils_Matrix.c 2011-09-19 13:08:01 UTC (rev 40352)
@@ -266,42 +266,19 @@
axis_angle_to_mat3((float (*)[3])mat, tvec, angle);
}
- else if(matSize == 2) {
+ else if (matSize == 2) {
+ const float angle_cos= cosf(angle);
+ const float angle_sin= sinf(angle);
+
//2D rotation matrix
- mat[0] = (float) cos (angle);
- mat[1] = (float) sin (angle);
- mat[2] = -((float) sin(angle));
- mat[3] = (float) cos(angle);
+ mat[0] = angle_cos;
+ mat[1] = angle_sin;
+ mat[2] = -angle_sin;
+ mat[3] = angle_cos;
}
- else if(strcmp(axis, "X") == 0) {
- //rotation around X
- mat[0] = 1.0f;
- mat[4] = (float) cos(angle);
- mat[5] = (float) sin(angle);
- mat[7] = -((float) sin(angle));
- mat[8] = (float) cos(angle);
- }
- else if(strcmp(axis, "Y") == 0) {
- //rotation around Y
- mat[0] = (float) cos(angle);
- mat[2] = -((float) sin(angle));
- mat[4] = 1.0f;
- mat[6] = (float) sin(angle);
- mat[8] = (float) cos(angle);
- }
- else if(strcmp(axis, "Z") == 0) {
- //rotation around Z
- mat[0] = (float) cos(angle);
- mat[1] = (float) sin(angle);
- mat[3] = -((float) sin(angle));
- mat[4] = (float) cos(angle);
- mat[8] = 1.0f;
- }
else {
- /* should never get here */
- PyErr_SetString(PyExc_ValueError,
- "mathutils.RotationMatrix(): unknown error");
- return NULL;
+ /* valid axis checked above */
+ single_axis_angle_to_mat3((float (*)[3])mat, axis[0], angle);
}
if(matSize == 4) {
More information about the Bf-blender-cvs
mailing list