12 #pragma implementation 
   15 #include "CLHEP/Vector/Rotation.h" 
   16 #include "CLHEP/Units/PhysicalConstants.h" 
   27 HepRotation & HepRotation::set( 
const Hep3Vector & aaxis, 
double ddelta ) {
 
   29   register double sinDelta = std::sin(ddelta), cosDelta = std::cos(ddelta);
 
   30   register double oneMinusCosDelta = 1.0 - cosDelta;
 
   32   Hep3Vector u = aaxis.unit();
 
   34   register double uX = u.getX();
 
   35   register double uY = u.getY();
 
   36   register double uZ = u.getZ();
 
   38   rxx = oneMinusCosDelta * uX * uX  +  cosDelta;
 
   39   rxy = oneMinusCosDelta * uX * uY  -  sinDelta * uZ;
 
   40   rxz = oneMinusCosDelta * uX * uZ  +  sinDelta * uY;
 
   42   ryx = oneMinusCosDelta * uY * uX  +  sinDelta * uZ;
 
   43   ryy = oneMinusCosDelta * uY * uY  +  cosDelta;
 
   44   ryz = oneMinusCosDelta * uY * uZ  -  sinDelta * uX;
 
   46   rzx = oneMinusCosDelta * uZ * uX  -  sinDelta * uY;
 
   47   rzy = oneMinusCosDelta * uZ * uY  +  sinDelta * uX;
 
   48   rzz = oneMinusCosDelta * uZ * uZ  +  cosDelta;
 
   54 HepRotation::HepRotation ( 
const Hep3Vector & aaxis, 
double ddelta ) 
 
   58 HepRotation & HepRotation::set( 
const HepAxisAngle & ax ) {
 
   59   return  set ( ax.axis(), ax.delta() );
 
   61 HepRotation::HepRotation ( 
const HepAxisAngle & ax ) 
 
   63   set ( ax.axis(), ax.delta() );
 
   66 double    HepRotation::delta()
 const {
 
   68   double cosdelta = (rxx + ryy + rzz - 1.0) / 2.0;
 
   71   } 
else if (cosdelta < -1.0) {
 
   74     return  std::acos( cosdelta ); 
 
   79 Hep3Vector HepRotation::axis ()
 const {
 
   84   double  Uz = ryx - rxy;
 
   85   double  Uy = rxz - rzx;
 
   86   double  Ux = rzy - ryz;
 
   88   if ( (Uz==0) && (Uy==0) && (Ux==0) ) {
 
   90       return Hep3Vector(0,0,1);
 
   92       return Hep3Vector(0,1,0);
 
   94       return Hep3Vector(1,0,0);
 
   97     return  Hep3Vector( Ux, Uy, Uz ).unit();
 
  102 HepAxisAngle HepRotation::axisAngle()
 const {
 
  104   return HepAxisAngle (axis(), delta());
 
  109 void HepRotation::setAxis (
const Hep3Vector & aaxis) {
 
  110   set ( aaxis, delta() );
 
  113 void HepRotation::setDelta (
double ddelta) {
 
  114   set ( axis(), ddelta );