OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
CoordinateSystemTrafo.h
Go to the documentation of this file.
1 #ifndef COORDINATESYSTEMTRAFO
2 #define COORDINATESYSTEMTRAFO
3 
4 #include "Algorithms/Vektor.h"
6 #include "AppTypes/Tenzor.h"
7 
9 public:
11 
13 
14  CoordinateSystemTrafo(const Vector_t &origin,
15  const Quaternion &orientation);
16 
17  Vector_t transformTo(const Vector_t &r) const;
18  Vector_t transformFrom(const Vector_t &r) const;
19 
20  Vector_t rotateTo(const Vector_t &r) const;
21  Vector_t rotateFrom(const Vector_t &r) const;
22 
23  void invert();
25 
27  void operator*=(const CoordinateSystemTrafo &right);
28 
29  Vector_t getOrigin() const;
30  Quaternion getRotation() const;
31 
32  void print(std::ostream&) const;
33 private:
37 };
38 
39 inline
40 std::ostream& operator<<(std::ostream& os, const CoordinateSystemTrafo &trafo) {
41  trafo.print(os);
42  return os;
43 }
44 
45 inline
47  trafo.print(os.getStream());
48  return os;
49 }
50 
51 inline
52 void CoordinateSystemTrafo::print(std::ostream &os) const {
53  os << "Origin: " << origin_m << "\n"
54  << "z-axis: " << orientation_m.conjugate().rotate(Vector_t(0,0,1)) << "\n"
55  << "x-axis: " << orientation_m.conjugate().rotate(Vector_t(1,0,0));
56 }
57 
58 inline
60  return origin_m;
61 }
62 
63 inline
65  return orientation_m;
66 }
67 
68 inline
70  CoordinateSystemTrafo result(*this);
71  result.invert();
72 
73  return result;
74 }
75 
76 inline
78  return dot(rotationMatrix_m, r - origin_m);
79 }
80 
81 inline
83  return dot(transpose(rotationMatrix_m), r) + origin_m;
84 }
85 
86 inline
88  return dot(rotationMatrix_m, r);
89 }
90 
91 inline
93  return dot(transpose(rotationMatrix_m), r);
94 }
95 
96 #endif
std::ostream & operator<<(std::ostream &os, const Attribute &attr)
Definition: Attribute.cpp:167
Tenzor< double, 3 > rotationMatrix_m
Vector_t rotateTo(const Vector_t &r) const
std::ostream & getStream()
Definition: Inform.h:88
AntiSymTenzor< T, D > transpose(const AntiSymTenzor< T, D > &rhs)
Vector_t transformTo(const Vector_t &r) const
CoordinateSystemTrafo operator*(const CoordinateSystemTrafo &right) const
double dot(const Vector3D &lhs, const Vector3D &rhs)
Vector dot product.
Definition: Vector3D.cpp:118
Quaternion getRotation() const
Vektor< double, 3 > Vector_t
Definition: Vektor.h:6
Vector_t getOrigin() const
void print(std::ostream &) const
void operator*=(const CoordinateSystemTrafo &right)
Vector_t rotateFrom(const Vector_t &r) const
Vector_t rotate(const Vector_t &) const
Definition: Quaternion.cpp:122
CoordinateSystemTrafo inverted() const
Quaternion conjugate() const
Definition: Quaternion.h:104
Definition: Inform.h:41
Vector_t transformFrom(const Vector_t &r) const