Leonetienne/Eule
Homemade math library, mainly targetted towards computer graphics
Quaternion.h
Go to the documentation of this file.
1 #pragma once
2 #include "Vector3.h"
3 #include "Vector4.h"
4 #include "Matrix4x4.h"
5 
6 namespace Eule
7 {
10  class Quaternion
11  {
12  public:
13  Quaternion();
14 
16  explicit Quaternion(const Vector4d values);
17 
19  Quaternion(const Quaternion& q);
20 
22  Quaternion(const Vector3d eulerAngles);
23 
24  ~Quaternion();
25 
28 
30  Quaternion operator* (const Quaternion& q) const;
31 
34 
37 
40 
42  Vector3d operator* (const Vector3d& p) const;
43 
44  bool operator== (const Quaternion& q) const;
45  bool operator!= (const Quaternion& q) const;
46 
47  Quaternion Inverse() const;
48 
49  Quaternion Conjugate() const;
50 
51  Quaternion UnitQuaternion() const;
52 
54  Vector3d RotateVector(const Vector3d& vec) const;
55 
57  Vector3d ToEulerAngles() const;
58 
61 
63  Vector4d GetRawValues() const;
64 
66  Quaternion AngleBetween(const Quaternion& other) const;
67 
69  void SetRawValues(const Vector4d values);
70 
72  Quaternion Lerp(const Quaternion& other, double t) const;
73 
74  friend std::ostream& operator<< (std::ostream& os, const Quaternion& q);
75  friend std::wostream& operator<< (std::wostream& os, const Quaternion& q);
76 
77  private:
79  Quaternion operator* (const double scale) const;
80  Quaternion& operator*= (const double scale);
81 
83  Vector4d v;
84 
86  void InvalidateCache();
87 
88  // Caches for conversions
89  mutable bool isCacheUpToDate_euler = false;
90  mutable Vector3d cache_euler;
91 
92  mutable bool isCacheUpToDate_matrix = false;
93  mutable Matrix4x4 cache_matrix;
94 
95  mutable bool isCacheUpToDate_inverse = false;
96  mutable Vector4d cache_inverse;
97 
98  };
99 }
Eule::Quaternion::operator/
Quaternion operator/(Quaternion &q) const
Divides (applies)
Definition: Quaternion.cpp:126
Eule::Quaternion::ToRotationMatrix
Matrix4x4 ToRotationMatrix() const
Will return a rotation matrix representing this Quaternions rotation.
Definition: Quaternion.cpp:246
Eule::Quaternion::GetRawValues
Vector4d GetRawValues() const
Will return the raw four-dimensional values.
Definition: Quaternion.cpp:290
Eule::Quaternion::AngleBetween
Quaternion AngleBetween(const Quaternion &other) const
Will return the value between two Quaternion's as another Quaternion.
Definition: Quaternion.cpp:295
Eule::Vector3< double >
Eule::Quaternion::Lerp
Quaternion Lerp(const Quaternion &other, double t) const
Will return the lerp result between two quaternions.
Definition: Quaternion.cpp:309
Eule::Quaternion::UnitQuaternion
Quaternion UnitQuaternion() const
Definition: Quaternion.cpp:192
Eule::Quaternion::ToEulerAngles
Vector3d ToEulerAngles() const
Will return euler angles representing this Quaternion's rotation.
Definition: Quaternion.cpp:215
Eule::Quaternion::operator=
Quaternion operator=(const Quaternion &q)
Copies.
Definition: Quaternion.cpp:102
Matrix4x4.h
Eule::Quaternion::~Quaternion
~Quaternion()
Definition: Quaternion.cpp:97
Eule::Quaternion::operator*
Quaternion operator*(const Quaternion &q) const
Multiplies (applies)
Definition: Quaternion.cpp:111
Eule::Matrix4x4
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
Eule::Quaternion::operator*=
Quaternion & operator*=(const Quaternion &q)
Also multiplies.
Definition: Quaternion.cpp:131
Eule::Quaternion::SetRawValues
void SetRawValues(const Vector4d values)
Will set the raw four-dimensional values.
Definition: Quaternion.cpp:300
Vector4.h
Eule::Quaternion::RotateVector
Vector3d RotateVector(const Vector3d &vec) const
Will rotate a vector by this quaternion.
Definition: Quaternion.cpp:197
Eule::Quaternion::Quaternion
Quaternion()
Definition: Quaternion.cpp:11
Vector3.h
Eule::Quaternion::Conjugate
Quaternion Conjugate() const
Definition: Quaternion.cpp:187
Eule::Quaternion::Inverse
Quaternion Inverse() const
Definition: Quaternion.cpp:175
Eule::Quaternion::operator==
bool operator==(const Quaternion &q) const
Definition: Quaternion.cpp:165
Eule::Quaternion::operator<<
friend std::ostream & operator<<(std::ostream &os, const Quaternion &q)
Definition: Quaternion.cpp:325
Eule::Quaternion
3D rotation representation
Definition: Quaternion.h:10
Eule::Quaternion::operator!=
bool operator!=(const Quaternion &q) const
Definition: Quaternion.cpp:170
Eule::Quaternion::operator/=
Quaternion & operator/=(const Quaternion &q)
Also divides.
Definition: Quaternion.cpp:152
Eule
Definition: Collider.h:4
Eule::Vector4< double >