I don't like having two equivalent constructors from thevsame data or
using a vector to hold angles.
What I had meant with my suggestion is initialization from an axis and
an amount of rotation about that axis as that is a somewhat less
problematic basis than Euler angles (and one I use :-)
Author: kerenl@SALILAB.ORG
Date: 2008-11-12 14:31:59 -0800 (Wed, 12 Nov 2008)
New Revision: 854
Modified:
trunk/modules/misc/include/Rotation3D.h
Log:
1. Change protected to private
2. Add constructors from Vector3D and an angle
3. update documentation
Modified: trunk/modules/misc/include/Rotation3D.h
===================================================================
--- trunk/modules/misc/include/Rotation3D.h 2008-11-12 21:15:36
UTC (rev 853)
+++ trunk/modules/misc/include/Rotation3D.h 2008-11-12 22:31:59
UTC (rev 854)
@@ -19,26 +19,28 @@
class IMPMISCEXPORT Rotation3D {
public:
- //! Initialize a rotation in x-y-z order from three angles
+ Rotation3D(){
+ }
+ //! Initialize a rotation in x-y-z order from three Euler angles
/** \param[in] xr Rotation around the X axis
\param[in] yr Rotation around the Y axis
\param[in] zr Rotation around the Z axis
*/
Rotation3D(Float xr, Float yr, Float zr) {
- Float cx = cos(xr); Float cy = cos(yr); Float cz = cos(zr);
- Float sx = sin(xr); Float sy = sin(yr); Float sz = sin(zr);
- Float m00 = cz*cy;
- Float m11 = -sy*sx*sz + cx*cz;
- Float m22 = cy*cx;
- quat_[0] = sqrt(1+m00+m11+m22)/2.0;
- quat_[1] = sqrt(1+m00-m11-m22)/2.0;
- quat_[2] = sqrt(1-m00+m11-m22)/2.0;
- quat_[3] = sqrt(1-m00-m11+m22)/2.0;
- if (cy*sx + sy*cx*sz + sx*cz < 0.0) quat_[1] = -quat_[1];
- if (sz*sx - sy*cx*cz - sy < 0.0) quat_[2] = -quat_[2];
- if (sz*cy + sy*sx*cz + sz*cx < 0.0) quat_[3] = -quat_[3];
+ init_angles(xr,yr,zr);
}
-
+ //! Initialize a rotation in x-y-z order from three identical
Euler angles
+ /** \param[in] e_angle Rotation around first the X axis, Y axis
and Z axis
+ */
+ Rotation3D(Float e_angle){
+ init_angles(e_angle, e_angle, e_angle);
+ }
+ //! Initialize a rotation in x-y-z order from three Euler angles
+ /** \param[in] v A vector that holds three Euler angles (x-y-z
order)