TransformationMatrix.h
Go to the documentation of this file.
1 #ifndef _utl_TransformationMatrix_h_
2 #define _utl_TransformationMatrix_h_
3 
13 #include <CLHEP/Geometry/Transform3D.h>
14 #include <CLHEP/Geometry/Point3D.h>
15 #include <boost/operators.hpp>
16 #include <boost/tuple/tuple.hpp>
17 #include <utl/unconfig.h>
18 #include <utl/config.h>
19 #include <iostream>
20 
21 namespace io {
22  class CoordinateSystem_ROOT;
23 }
24 
25 namespace utl {
26 
55  class TransformationMatrix : public boost::multipliable<TransformationMatrix> {
56 
57  public:
58  typedef boost::tuple<double, double, double> Triple;
59 
61  static const int kDimension = 4;
62 
64 
67 
70 
72  double Distance(const TransformationMatrix& second) const;
73 
82  boost::tuple<TransformationMatrix, TransformationMatrix> Decompose() const;
83 
84  // Extra factory functions - all static
86  static TransformationMatrix Translation(const double x, const double y, const double z);
87 
89  static TransformationMatrix Rotation(const double angle,
90  const double x, const double y, const double z);
91  static TransformationMatrix Rotation(const double angle, const Triple& v);
93  static TransformationMatrix RotationX(const double angle);
95  static TransformationMatrix RotationY(const double angle);
97  static TransformationMatrix RotationZ(const double angle);
98 
100  static
102  TransformToBasis(const double x1, const double y1, const double z1,
103  const double x2, const double y2, const double z2,
104  const double x3, const double y3, const double z3);
105 
106  private:
107  typedef HepGeom::Transform3D InternalTransform;
108 
111  : fTransform(transform) { }
112 
114 
120 
121  template<class Vector> friend class BasicVector;
122  friend class TransformationPolicy;
123  friend std::ostream& operator<<(std::ostream& s, const TransformationMatrix& m);
125 
126  };
127 
128 
129  std::ostream& operator<<(std::ostream&s, const TransformationMatrix& m);
130 
131 } // utl
132 
133 
134 #endif // _utl_TransformationMatrix_h_
135 
136 // Configure (x)emacs for this file ...
137 // Local Variables:
138 // mode: c++
139 // compile-command: "make -C .. -k"
140 // End:
boost::tuple< TransformationMatrix, TransformationMatrix > Decompose() const
Decomposition into Translation and Rotation.
constexpr double second
Definition: AugerUnits.h:145
TransformationMatrix & operator*=(const TransformationMatrix &second)
Chaining of transformations.
static TransformationMatrix TransformToBasis(const double x1, const double y1, const double z1, const double x2, const double y2, const double z2, const double x3, const double y3, const double z3)
From dreibein (basis vectors)
boost::tuple< double, double, double > Triple
static TransformationMatrix RotationX(const double angle)
Rotation by angle about X axis.
TransformationMatrix(const InternalTransform &transform)
Private constructor to build transformation from HepGeom::Transform3D.
Stream & operator<<(Stream &s, MessageLoggerConfig &mlc)
Applies the configuration to the given stream.
static TransformationMatrix Rotation(const double angle, const double x, const double y, const double z)
Rotation by angle about axis given by three components.
ROOT streamer implementation for utl::CoordinateSystem.
Transformations matrices for afine transformations.
boost::tuple< double, double, double > Triple
Coordinate triple for easy getting or setting of coordinates.
Definition: Triple.h:15
double Distance(const TransformationMatrix &second) const
Distance between transformations (useful for testing)
static const int kDimension
Dimension of transformation matrix.
Basic vector class template for geometry.
Definition: BasicVector.h:42
constexpr double s
Definition: AugerUnits.h:163
static TransformationMatrix Translation(const double x, const double y, const double z)
Translation.
TransformationMatrix Inverse() const
Inverse transformation.
friend std::ostream & operator<<(std::ostream &s, const TransformationMatrix &m)
HepGeom::Transform3D InternalTransform
static TransformationMatrix RotationZ(const double angle)
Rotation by angle about Z axis.
constexpr double m
Definition: AugerUnits.h:121
InternalTransform fTransform
The concrete transformation object.
static TransformationMatrix RotationY(const double angle)
Rotation by angle about Y axis.

, generated on Tue Sep 26 2023.