38 void EulerAngles::Rectify()
41 if ( fTheta < 0 || fTheta > Pi() ) {
42 Scalar t = fTheta - std::floor( fTheta/(2*Pi()) ) * 2*Pi();
52 if ( fPhi <= -Pi()|| fPhi > Pi() ) {
53 fPhi = fPhi - std::floor( fPhi/(2*Pi()) +.5 ) * 2*Pi();
56 if ( fPsi <= -Pi()|| fPsi > Pi() ) {
57 fPsi = fPsi - std::floor( fPsi/(2*Pi()) +.5 ) * 2*Pi();
73 EulerAngles EulerAngles::operator * (
const Rotation3D & r)
const {
75 return EulerAngles ( Rotation3D(*
this) * r );
78 EulerAngles EulerAngles::operator * (
const AxisAngle & a)
const {
80 return EulerAngles ( Quaternion(*
this) * Quaternion(a) );
83 EulerAngles EulerAngles::operator * (
const EulerAngles & e)
const {
85 return EulerAngles ( Quaternion(*
this) * Quaternion(e) );
87 EulerAngles EulerAngles::operator * (
const Quaternion & q)
const {
89 return EulerAngles ( Quaternion(*
this) * q );
92 EulerAngles EulerAngles::operator * (
const RotationX & r)
const {
94 return EulerAngles ( Quaternion(*
this) * r );
97 EulerAngles EulerAngles::operator * (
const RotationY & r)
const {
99 return EulerAngles ( Quaternion(*
this) * r );
102 EulerAngles EulerAngles::operator * (
const RotationZ & r)
const {
106 Scalar newPhi = fPhi + r.Angle();
107 if ( newPhi <= -Pi()|| newPhi > Pi() ) {
108 newPhi = newPhi - std::floor( newPhi/(2*Pi()) +.5 ) * 2*Pi();
110 return EulerAngles ( newPhi, fTheta, fPsi );
113 EulerAngles operator * ( RotationX
const & r, EulerAngles
const & e ) {
114 return EulerAngles(r) * e;
117 EulerAngles operator * ( RotationY
const & r, EulerAngles
const & e ) {
118 return EulerAngles(r) * e;
122 operator * ( RotationZ
const & r, EulerAngles
const & e ) {
123 return EulerAngles(r) * e;
128 std::ostream & operator<< (std::ostream & os,
const EulerAngles & e) {
131 os <<
"\n{phi: " << e.Phi() <<
" theta: " << e.Theta()
132 <<
" psi: " << e.Psi() <<
"}\n";