Geant4 Cross Reference |
1 // -*- C++ -*- 1 // -*- C++ -*- 2 // ------------------------------------------- 2 // --------------------------------------------------------------------------- 3 // 3 // 4 // This file is a part of the CLHEP - a Class 4 // This file is a part of the CLHEP - a Class Library for High Energy Physics. 5 // 5 // 6 // This is the implementation of methods of th 6 // This is the implementation of methods of the HepRotation class which 7 // were introduced when ZOOM PhysicsVectors wa 7 // were introduced when ZOOM PhysicsVectors was merged in, other than those 8 // involving Euler or axis/angle representatio 8 // involving Euler or axis/angle representations, lengthy corrections of 9 // the rotation matrix, or I/O. 9 // the rotation matrix, or I/O. 10 // 10 // 11 11 >> 12 #ifdef GNUPRAGMA >> 13 #pragma implementation >> 14 #endif >> 15 12 #include "CLHEP/Vector/Rotation.h" 16 #include "CLHEP/Vector/Rotation.h" 13 17 14 #include <cmath> 18 #include <cmath> 15 19 16 20 17 namespace CLHEP { 21 namespace CLHEP { 18 22 19 void HepRotation::decompose(HepAxisAngle & rot 23 void HepRotation::decompose(HepAxisAngle & rotation, Hep3Vector & boost)const { 20 boost.set(0,0,0); 24 boost.set(0,0,0); 21 rotation = axisAngle(); 25 rotation = axisAngle(); 22 } 26 } 23 27 24 void HepRotation::decompose(Hep3Vector & boost 28 void HepRotation::decompose(Hep3Vector & boost, HepAxisAngle & rotation)const { 25 boost.set(0,0,0); 29 boost.set(0,0,0); 26 rotation = axisAngle(); 30 rotation = axisAngle(); 27 } 31 } 28 32 29 double HepRotation::distance2( const HepRotati 33 double HepRotation::distance2( const HepRotation & r ) const { 30 double sum = rxx * r.rxx + rxy * r.rxy + rxz 34 double sum = rxx * r.rxx + rxy * r.rxy + rxz * r.rxz 31 + ryx * r.ryx + ryy * r.ryy + 35 + ryx * r.ryx + ryy * r.ryy + ryz * r.ryz 32 + rzx * r.rzx + rzy * r.rzy + 36 + rzx * r.rzx + rzy * r.rzy + rzz * r.rzz; 33 double answer = 3.0 - sum; 37 double answer = 3.0 - sum; 34 return (answer >= 0 ) ? answer : 0; 38 return (answer >= 0 ) ? answer : 0; 35 } 39 } 36 40 37 double HepRotation::howNear( const HepRotati 41 double HepRotation::howNear( const HepRotation & r ) const { 38 return std::sqrt( distance2( r ) ); 42 return std::sqrt( distance2( r ) ); 39 } 43 } 40 44 41 bool HepRotation::isNear( const HepRotation 45 bool HepRotation::isNear( const HepRotation & r, 42 double ep 46 double epsilon) const { 43 return distance2( r ) <= epsilon*epsilon; 47 return distance2( r ) <= epsilon*epsilon; 44 } 48 } 45 49 46 double HepRotation::norm2() const { 50 double HepRotation::norm2() const { 47 double answer = 3.0 - rxx - ryy - rzz; 51 double answer = 3.0 - rxx - ryy - rzz; 48 return (answer >= 0 ) ? answer : 0; 52 return (answer >= 0 ) ? answer : 0; 49 } 53 } 50 54 51 } // namespace CLHEP 55 } // namespace CLHEP 52 56