OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
Quaternion.h
Go to the documentation of this file.
1 #ifndef OPAL_QUATERNION_H
2 #define OPAL_QUATERNION_H
3 
4 #include "AppTypes/Vektor.h"
5 #include "Algorithms/Vektor.h"
6 
7 template <class, unsigned>
8 class Tenzor;
9 
10 class Quaternion: public Vektor<double, 4> {
11 public:
12  Quaternion();
13  Quaternion(const Quaternion &);
14  Quaternion(const double &, const double &, const double &, const double &);
15  Quaternion(const Vector_t &);
16  Quaternion(const double &, const Vector_t &);
18 
19  Quaternion operator*(const double &) const;
20  Quaternion operator*(const Quaternion &) const;
22  Quaternion operator/(const double &) const;
23 
24  double Norm() const;
25  double length() const;
27 
28  bool isUnit() const;
29  bool isPure() const;
30  bool isPureUnit() const;
31 
32  Quaternion inverse() const;
33  Quaternion conjugate() const;
34 
35  double real() const;
36  Vector_t imag() const;
37 
38  Vector_t rotate(const Vector_t &) const;
39 
41 };
42 
44 
46 
47 
48 inline
50  Vektor<double, 4>(1.0, 0.0, 0.0, 0.0)
51 {}
52 
53 inline
55  Vektor<double, 4>(quat)
56 {}
57 
58 inline
59 Quaternion::Quaternion(const double & x0, const double & x1, const double & x2, const double & x3):
60  Vektor<double, 4>(x0, x1, x2, x3)
61 {}
62 
63 inline
65  Quaternion(0.0, vec(0), vec(1), vec(2))
66 {}
67 
68 inline
69 Quaternion::Quaternion(const double & realPart, const Vector_t & vec):
70  Quaternion(realPart, vec(0), vec(1), vec(2))
71 {}
72 
73 inline
74 double Quaternion::Norm() const
75 {
76  return dot(*this, *this);
77 }
78 
79 inline
80 double Quaternion::length() const
81 {
82  return sqrt(this->Norm());
83 }
84 
85 inline
86 bool Quaternion::isUnit() const
87 {
88  return (std::abs(this->Norm() - 1.0) < 1e-12);
89 }
90 
91 inline
92 bool Quaternion::isPure() const
93 {
94  return (std::abs((*this)(0)) < 1e-12);
95 }
96 
97 inline
99 {
100  return (this->isPure() && this->isUnit());
101 }
102 
103 inline
105 {
106  Quaternion quat(this->real(), -this->imag());
107 
108  return quat;
109 }
110 
111 inline
112 double Quaternion::real() const
113 {
114  return (*this)(0);
115 }
116 
117 inline
119 {
120  Vector_t vec((*this)(1), (*this)(2), (*this)(3));
121 
122  return vec;
123 }
124 
125 
126 #endif
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
constexpr double e
The value of .
Definition: Physics.h:40
bool isPureUnit() const
Definition: Quaternion.h:98
Definition: TSVMeta.h:24
bool isUnit() const
Definition: Quaternion.h:86
Tenzor< double, 3 > getRotationMatrix() const
Definition: Quaternion.cpp:135
Quaternion Quaternion_t
Definition: Quaternion.h:43
Quaternion getQuaternion(Vector_t u, Vector_t ref)
Definition: Quaternion.cpp:34
Quaternion & operator*=(const Quaternion &)
Definition: Quaternion.cpp:84
double dot(const Vector3D &lhs, const Vector3D &rhs)
Vector dot product.
Definition: Vector3D.cpp:118
Vector_t imag() const
Definition: Quaternion.h:118
Quaternion operator*(const double &) const
Definition: Quaternion.cpp:71
Quaternion inverse() const
Definition: Quaternion.cpp:115
double Norm() const
Definition: Quaternion.h:74
Quaternion operator/(const double &) const
Definition: Quaternion.cpp:95
Tps< T > sqrt(const Tps< T > &x)
Square root.
Definition: TpsMath.h:91
Definition: Vec.h:21
double length() const
Definition: Quaternion.h:80
Vector_t rotate(const Vector_t &) const
Definition: Quaternion.cpp:122
Quaternion conjugate() const
Definition: Quaternion.h:104
Quaternion & normalize()
Definition: Quaternion.cpp:102
bool isPure() const
Definition: Quaternion.h:92
double real() const
Definition: Quaternion.h:112