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 // ------------------------------------------- 6 // ---------------------------------------------------------------------- 7 // ------------------------------------------- 7 // ---------------------------------------------------------------------- 8 // 8 // 9 // AxisAngle.h - provide HepAxisAngle class 9 // AxisAngle.h - provide HepAxisAngle class 10 // 10 // 11 // History: 11 // History: 12 // 23-Jan-1998 WEB Initial draft 12 // 23-Jan-1998 WEB Initial draft 13 // 15-Jun-1998 WEB Added namespace support 13 // 15-Jun-1998 WEB Added namespace support 14 // 02-May-2000 WEB No global using 14 // 02-May-2000 WEB No global using 15 // 27-Jul-2000 MF CLHEP version 15 // 27-Jul-2000 MF CLHEP version 16 // 16 // 17 // ------------------------------------------- 17 // ---------------------------------------------------------------------- 18 18 19 #ifndef HEP_AXISANGLE_H 19 #ifndef HEP_AXISANGLE_H 20 #define HEP_AXISANGLE_H 20 #define HEP_AXISANGLE_H 21 21 22 #include <iostream> 22 #include <iostream> 23 #include "CLHEP/Vector/ThreeVector.h" 23 #include "CLHEP/Vector/ThreeVector.h" 24 24 25 namespace CLHEP { 25 namespace CLHEP { 26 26 27 // Declarations of classes and global methods 27 // Declarations of classes and global methods 28 class HepAxisAngle; 28 class HepAxisAngle; 29 std::ostream & operator<<( std::ostream & os, 29 std::ostream & operator<<( std::ostream & os, const HepAxisAngle & aa ); 30 std::istream & operator>>( std::istream & is, 30 std::istream & operator>>( std::istream & is, HepAxisAngle & aa ); 31 31 32 /** 32 /** 33 * @author 33 * @author 34 * @ingroup vector 34 * @ingroup vector 35 */ 35 */ 36 class HepAxisAngle { 36 class HepAxisAngle { 37 37 38 public: 38 public: 39 typedef double Scalar; 39 typedef double Scalar; 40 40 41 protected: 41 protected: 42 typedef HepAxisAngle AA; // just an 42 typedef HepAxisAngle AA; // just an abbreviation 43 static Scalar tolerance; // to determin 43 static Scalar tolerance; // to determine relative nearness 44 44 45 public: 45 public: 46 46 47 // ---------- Constructors: 47 // ---------- Constructors: 48 inline HepAxisAngle(); 48 inline HepAxisAngle(); 49 inline HepAxisAngle( const Hep3Vector axis, 49 inline HepAxisAngle( const Hep3Vector axis, Scalar delta ); 50 50 51 // ---------- Destructor, copy constructor, 51 // ---------- Destructor, copy constructor, assignment: 52 // use C++ defaults 52 // use C++ defaults 53 53 54 // ---------- Accessors: 54 // ---------- Accessors: 55 55 56 public: 56 public: 57 inline Hep3Vector getAxis() const 57 inline Hep3Vector getAxis() const; 58 inline Hep3Vector axis() const; 58 inline Hep3Vector axis() const; 59 inline AA & setAxis( const 59 inline AA & setAxis( const Hep3Vector axis ); 60 60 61 inline double getDelta() const; 61 inline double getDelta() const; 62 inline double delta() const ; 62 inline double delta() const ; 63 inline AA & setDelta( Scala 63 inline AA & setDelta( Scalar delta ); 64 64 65 inline AA & set( const Hep3Vector axis, Scal 65 inline AA & set( const Hep3Vector axis, Scalar delta ); 66 66 67 // ---------- Operations: 67 // ---------- Operations: 68 68 69 // comparisons: 69 // comparisons: 70 inline int compare ( const AA & aa ) cons 70 inline int compare ( const AA & aa ) const; 71 71 72 inline bool operator==( const AA & aa ) cons 72 inline bool operator==( const AA & aa ) const; 73 inline bool operator!=( const AA & aa ) cons 73 inline bool operator!=( const AA & aa ) const; 74 inline bool operator< ( const AA & aa ) cons 74 inline bool operator< ( const AA & aa ) const; 75 inline bool operator<=( const AA & aa ) cons 75 inline bool operator<=( const AA & aa ) const; 76 inline bool operator> ( const AA & aa ) cons 76 inline bool operator> ( const AA & aa ) const; 77 inline bool operator>=( const AA & aa ) cons 77 inline bool operator>=( const AA & aa ) const; 78 78 79 // relative comparison: 79 // relative comparison: 80 inline static double getTolerance(); 80 inline static double getTolerance(); 81 inline static double setTolerance( Scalar to 81 inline static double setTolerance( Scalar tol ); 82 82 83 protected: 83 protected: 84 double distance( const HepAxisAngle & aa ) 84 double distance( const HepAxisAngle & aa ) const; 85 public: 85 public: 86 86 87 bool isNear ( const AA & aa, Scalar epsilon 87 bool isNear ( const AA & aa, Scalar epsilon = tolerance ) const; 88 double howNear( const AA & aa ) const; 88 double howNear( const AA & aa ) const; 89 89 90 // ---------- I/O: 90 // ---------- I/O: 91 91 92 friend std::ostream & operator<<( std::ostre 92 friend std::ostream & operator<<( std::ostream & os, const AA & aa ); 93 friend std::istream & operator>>( std::istre 93 friend std::istream & operator>>( std::istream & is, AA & aa ); 94 94 95 private: 95 private: 96 Hep3Vector axis_; // Note: After construct 96 Hep3Vector axis_; // Note: After construction, this is always of mag 1 97 double delta_; 97 double delta_; 98 98 99 }; // HepAxisAngle 99 }; // HepAxisAngle 100 100 101 101 102 } // namespace CLHEP 102 } // namespace CLHEP 103 103 104 #include "CLHEP/Vector/AxisAngle.icc" 104 #include "CLHEP/Vector/AxisAngle.icc" 105 105 106 #endif // HEP_AXISANGLE_H 106 #endif // HEP_AXISANGLE_H 107 107