OPAL (Object Oriented Parallel Accelerator Library) 2024.2
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"
6#include "Algorithms/Vektor.h"
7
8class Quaternion: public Vektor<double, 4> {
9public:
10 Quaternion();
11 Quaternion(const Quaternion &);
12 Quaternion(const double &, const double &, const double &, const double &);
13 Quaternion(const Vector_t &);
14 Quaternion(const double &, const Vector_t &);
15 Quaternion(const matrix_t &);
16
17 Quaternion operator*(const double &) const;
18 Quaternion operator*(const Quaternion &) const;
19 Quaternion& operator=(const Quaternion &) = default;
21 Quaternion operator/(const double &) const;
22
23 double Norm() const;
24 double length() const;
26
27 bool isUnit() const;
28 bool isPure() const;
29 bool isPureUnit() const;
30
31 Quaternion inverse() const;
32 Quaternion conjugate() const;
33
34 double real() const;
35 Vector_t imag() const;
36
37 Vector_t rotate(const Vector_t &) const;
38
40};
41
43
45
46
47inline
49 Vektor<double, 4>(1.0, 0.0, 0.0, 0.0)
50{}
51
52inline
54 Vektor<double, 4>(quat)
55{}
56
57inline
58Quaternion::Quaternion(const double & x0, const double & x1, const double & x2, const double & x3):
59 Vektor<double, 4>(x0, x1, x2, x3)
60{}
61
62inline
64 Quaternion(0.0, vec(0), vec(1), vec(2))
65{}
66
67inline
68Quaternion::Quaternion(const double & realPart, const Vector_t & vec):
69 Quaternion(realPart, vec(0), vec(1), vec(2))
70{}
71
72inline
73double Quaternion::Norm() const
74{
75 return dot(*this, *this);
76}
77
78inline
79double Quaternion::length() const
80{
81 return std::sqrt(this->Norm());
82}
83
84inline
86{
87 return (std::abs(this->Norm() - 1.0) < 1e-12);
88}
89
90inline
92{
93 return (std::abs((*this)(0)) < 1e-12);
94}
95
96inline
98{
99 return (this->isPure() && this->isUnit());
100}
101
102inline
104{
105 Quaternion quat(this->real(), -this->imag());
106
107 return quat;
108}
109
110inline
111double Quaternion::real() const
112{
113 return (*this)(0);
114}
115
116inline
118{
119 Vector_t vec((*this)(1), (*this)(2), (*this)(3));
120
121 return vec;
122}
123
124
125#endif
double dot(const Vector3D &lhs, const Vector3D &rhs)
Vector dot product.
Definition Vector3D.cpp:118
Quaternion Quaternion_t
Definition Quaternion.h:42
Quaternion getQuaternion(Vector_t vec, Vector_t reference)
boost::numeric::ublas::matrix< double > matrix_t
Definition BoostMatrix.h:23
bool isPure() const
Definition Quaternion.h:91
Quaternion & normalize()
Vector_t rotate(const Vector_t &) const
double real() const
Definition Quaternion.h:111
Quaternion conjugate() const
Definition Quaternion.h:103
Quaternion inverse() const
Quaternion & operator*=(const Quaternion &)
Quaternion operator/(const double &) const
Vector_t imag() const
Definition Quaternion.h:117
bool isUnit() const
Definition Quaternion.h:85
Quaternion & operator=(const Quaternion &)=default
Quaternion operator*(const double &) const
bool isPureUnit() const
Definition Quaternion.h:97
matrix_t getRotationMatrix() const
double length() const
Definition Quaternion.h:79
double Norm() const
Definition Quaternion.h:73
Definition Vec.h:22
Vektor< double, 3 > Vector_t