My Project
 
Loading...
Searching...
No Matches
Quaternion.h
1/*
2 * Quaternion and Vector3 math library,
3 * includes operations for ZYX Euler Angles, rate integration and much more
4 *
5 * O. Rangel Morales
6 * (GitHub: OrlandoR4)
7 * MIT license, all text above must be included in any redistribution
8 */
9
10#pragma once
11
19class Vector3
20{
21public:
22 float x;
23 float y;
24 float z;
25
26 Vector3()
27 {
28 x = 0.0;
29 y = 0.0;
30 z = 0.0;
31 }
32 Vector3(float x_, float y_, float z_)
33 {
34 x = x_;
35 y = y_;
36 z = z_;
37 }
38
39 // Operators
40
41 Vector3 operator+(Vector3 vt);
42 Vector3 operator+(float nt);
43 Vector3 operator-(Vector3 vt);
44 Vector3 operator-(float nt);
45 Vector3 operator+=(Vector3 vt);
46 Vector3 operator+=(float nt);
47 Vector3 operator-=(Vector3 vt);
48 Vector3 operator-=(float nt);
49 Vector3 operator*(Vector3 vt);
50 Vector3 operator*(float nt);
51 Vector3 operator/(Vector3 vt);
52 Vector3 operator/(float nt);
53 Vector3 operator*=(Vector3 vt);
54 Vector3 operator*=(float nt);
55 Vector3 operator/=(Vector3 vt);
56 Vector3 operator/=(float nt);
57
58 Vector3 normalize();
59 float get_magnitude();
60
61 float dot_product(Vector3 vt);
62 Vector3 cross_product(Vector3 vt);
63
64 float angle_between_vectors(Vector3 vt);
65
66 // Representation Operations
67
68 Vector3 rad_to_deg();
69 Vector3 deg_to_rad();
70};
71
80class Quaternion
81{
82public:
83 float w;
84 float x;
85 float y;
86 float z;
87
88 Quaternion()
89 {
90 w = 1.0;
91 x = 0.0;
92 y = 0.0;
93 z = 0.0;
94 }
95 Quaternion(float w_, float x_, float y_, float z_)
96 {
97 w = w_;
98 x = x_;
99 y = y_;
100 z = z_;
101 }
102
103 // Operators
104
105 Quaternion operator*(Quaternion qt);
106 Quaternion operator*=(Quaternion qt);
107
108 Quaternion normalize();
109 Quaternion conjugate();
110
111 // Vector Operations
112
114 Quaternion from_axis_angle(float theta, Vector3 vt);
115
116 // Representation Operations
117
119 Quaternion euler_to_quaternion(Vector3 vt);
120
121 // State Updates
122
123 Quaternion update_with_rates(float dt, Vector3 rates);
124 Quaternion update_with_accel(Vector3 at, Vector3 target_vector, float gain);
125 Quaternion update_with_mag(Vector3 mt, Vector3 at, Vector3 target_vector, Quaternion declination_compensation, float gain);
126};
Quaternion normalize()
Definition Quaternion.cpp:274
Vector3 quaternion_to_euler()
Definition Quaternion.cpp:343
Quaternion from_axis_angle(float theta, Vector3 vt)
Definition Quaternion.cpp:326
Vector3 rotate_vector(Vector3 vt)
Definition Quaternion.cpp:306
Quaternion operator*=(Quaternion qt)
Definition Quaternion.cpp:260
Quaternion conjugate()
Definition Quaternion.cpp:292
Quaternion operator*(Quaternion qt)
Definition Quaternion.cpp:246
Quaternion update_with_accel(Vector3 at, Vector3 target_vector, float gain)
Definition Quaternion.cpp:402
Quaternion update_with_rates(float dt, Vector3 rates)
Definition Quaternion.cpp:380
Quaternion update_with_mag(Vector3 mt, Vector3 at, Vector3 target_vector, Quaternion declination_compensation, float gain)
Definition Quaternion.cpp:435
Quaternion euler_to_quaternion(Vector3 vt)
Definition Quaternion.cpp:357
Definition Quaternion.h:20
float get_magnitude()
Definition Quaternion.cpp:168
Vector3 rad_to_deg()
Definition Quaternion.cpp:218
Vector3 deg_to_rad()
Definition Quaternion.cpp:230
float angle_between_vectors(Vector3 vt)
Definition Quaternion.cpp:204
float dot_product(Vector3 vt)
Definition Quaternion.cpp:177
Vector3 cross_product(Vector3 vt)
Definition Quaternion.cpp:190
Vector3 normalize()
Definition Quaternion.cpp:151