31 void AxisAngle::RectifyAngle() {
36 if ( fAngle <= Pi() && fAngle > -Pi() )
return;
39 int n =
static_cast<int>( (fAngle+Pi())/(2*Pi()) );
42 int n =
static_cast<int>( -(fAngle-Pi())/(2*Pi()) );
47 void AxisAngle::Rectify()
52 Scalar r2 = fAxis.Mag2();
54 fAxis.SetCoordinates(0,0,1);
64 enum ERotation3DMatrixIndex {
65 kXX = 0, kXY = 1, kXZ = 2
66 , kYX = 3, kYY = 4, kYZ = 5
67 , kZX = 6, kZY = 7, kZZ = 8
74 DisplacementVector3D< Cartesian3D<double> >
76 operator() (
const DisplacementVector3D< Cartesian3D<double> > & v)
const
78 Scalar c = std::cos(fAngle);
79 Scalar s = std::sin(fAngle);
80 Scalar p = fAxis.Dot(v) * ( 1 - c );
81 return DisplacementVector3D< Cartesian3D<double> >
83 c*v.X() + p*fAxis.X() + s * (fAxis.Y()*v.Z() - fAxis.Z()*v.Y())
84 , c*v.Y() + p*fAxis.Y() + s * (fAxis.Z()*v.X() - fAxis.X()*v.Z())
85 , c*v.Z() + p*fAxis.Z() + s * (fAxis.X()*v.Y() - fAxis.Y()*v.X())
91 std::ostream & operator<< (std::ostream & os,
const AxisAngle & a) {
94 os <<
"\n" << a.Axis() <<
" " << a.Angle() <<
"\n";