OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
CoordinateSystemTrafo.h
Go to the documentation of this file.
1#ifndef COORDINATESYSTEMTRAFO
2#define COORDINATESYSTEMTRAFO
3
5#include "Algorithms/Vektor.h"
7
9public:
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
28 void operator*=(const CoordinateSystemTrafo &right);
29
30 Vector_t getOrigin() const;
31 Quaternion getRotation() const;
32
33 void print(std::ostream&) const;
34private:
38};
39
40inline
41std::ostream& operator<<(std::ostream& os, const CoordinateSystemTrafo &trafo) {
42 trafo.print(os);
43 return os;
44}
45
46inline
48 trafo.print(os.getStream());
49 return os;
50}
51
52inline
53void CoordinateSystemTrafo::print(std::ostream &os) const {
54 os << "Origin: " << origin_m << "\n"
55 << "z-axis: " << orientation_m.conjugate().rotate(Vector_t(0,0,1)) << "\n"
56 << "x-axis: " << orientation_m.conjugate().rotate(Vector_t(1,0,0));
57}
58
59inline
63
64inline
68
69inline
71 CoordinateSystemTrafo result(*this);
72 result.invert();
73
74 return result;
75}
76
80
82 return rotateFrom(r) + origin_m;
83}
84
88
90 return prod_boost_vector(boost::numeric::ublas::trans(rotationMatrix_m), r);
91}
92
93#endif
std::ostream & operator<<(std::ostream &os, const CoordinateSystemTrafo &trafo)
boost::numeric::ublas::matrix< double > matrix_t
Definition BoostMatrix.h:23
T prod_boost_vector(const boost::numeric::ublas::matrix< double > &rotation, const T &vector)
Definition BoostMatrix.h:26
void operator*=(const CoordinateSystemTrafo &right)
Vector_t rotateFrom(const Vector_t &r) const
CoordinateSystemTrafo & operator=(const CoordinateSystemTrafo &right)=default
Vector_t transformFrom(const Vector_t &r) const
Vector_t transformTo(const Vector_t &r) const
Vector_t rotateTo(const Vector_t &r) const
void print(std::ostream &) const
CoordinateSystemTrafo inverted() const
CoordinateSystemTrafo operator*(const CoordinateSystemTrafo &right) const
Quaternion getRotation() const
std::ostream & getStream()
Definition Inform.h:89
Vektor< double, 3 > Vector_t