#include "Math/GenVector/EulerAngles.h"
#include <cmath>
#include "Math/GenVector/Cartesian3D.h"
#include "Math/GenVector/DisplacementVector3D.h"
#include "Math/GenVector/EulerAngles.h"
#include "Math/GenVector/Rotation3D.h"
#include "Math/GenVector/Quaternion.h"
#include "Math/GenVector/RotationX.h"
#include "Math/GenVector/RotationY.h"
#include "Math/GenVector/RotationZ.h"
#include "Math/GenVector/AxisAnglefwd.h"
namespace ROOT {
namespace Math {
void EulerAngles::Rectify()
{
if ( fTheta < 0 || fTheta > Pi() ) {
Scalar t = fTheta - std::floor( fTheta/(2*Pi()) ) * 2*Pi();
if ( t <= Pi() ) {
fTheta = t;
} else {
fTheta = 2*Pi() - t;
fPhi = fPhi + Pi();
fPsi = fPsi + Pi();
}
}
if ( fPhi <= -Pi()|| fPhi > Pi() ) {
fPhi = fPhi - std::floor( fPhi/(2*Pi()) +.5 ) * 2*Pi();
}
if ( fPsi <= -Pi()|| fPsi > Pi() ) {
fPsi = fPsi - std::floor( fPsi/(2*Pi()) +.5 ) * 2*Pi();
}
}
EulerAngles EulerAngles::operator * (const Rotation3D & r) const {
return EulerAngles ( Rotation3D(*this) * r );
}
EulerAngles EulerAngles::operator * (const AxisAngle & a) const {
return EulerAngles ( Quaternion(*this) * Quaternion(a) );
}
EulerAngles EulerAngles::operator * (const EulerAngles & e) const {
return EulerAngles ( Quaternion(*this) * Quaternion(e) );
}
EulerAngles EulerAngles::operator * (const Quaternion & q) const {
return EulerAngles ( Quaternion(*this) * q );
}
EulerAngles EulerAngles::operator * (const RotationX & r) const {
return EulerAngles ( Quaternion(*this) * r );
}
EulerAngles EulerAngles::operator * (const RotationY & r) const {
return EulerAngles ( Quaternion(*this) * r );
}
EulerAngles EulerAngles::operator * (const RotationZ & r) const {
Scalar newPhi = fPhi + r.Angle();
if ( newPhi <= -Pi()|| newPhi > Pi() ) {
newPhi = newPhi - std::floor( newPhi/(2*Pi()) +.5 ) * 2*Pi();
}
return EulerAngles ( newPhi, fTheta, fPsi );
}
EulerAngles operator * ( RotationX const & r, EulerAngles const & e ) {
return EulerAngles(r) * e;
}
EulerAngles operator * ( RotationY const & r, EulerAngles const & e ) {
return EulerAngles(r) * e;
}
EulerAngles
operator * ( RotationZ const & r, EulerAngles const & e ) {
return EulerAngles(r) * e;
}
std::ostream & operator<< (std::ostream & os, const EulerAngles & e) {
os << "\n{phi: " << e.Phi() << " theta: " << e.Theta()
<< " psi: " << e.Psi() << "}\n";
return os;
}
}
}
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.