32 #include "../api_core.h"
45 template<
typename Type>
53 union { Type
i; Type
x; };
54 union { Type
j; Type
y; };
55 union { Type
k; Type
z; };
58 explicit Quaternionx(Type real, Type
i, Type
j, Type
k) :
w(real), i(i), j(j), k(k) { }
155 bool operator<(const Quaternionx<Type> &other)
const
157 if (
x != other.x)
return x < other.x;
158 else if (
y != other.y)
return y < other.y;
159 else if (
z != other.z)
return z < other.z;
160 else return w < other.w;
166 if (
x != other.x)
return x > other.x;
167 else if (
y != other.y)
return y > other.y;
168 else if (
z != other.z)
return z > other.z;
169 else return w > other.w;
173 bool operator<=(const Quaternionx<Type> &other)
const {
return *
this < other || *
this == other; }
Angle class.
Definition: angle.h:63
Quaterniond(const Vec3< double > &euler, AngleUnit unit, EulerOrder order)
Definition: quaternion.h:213
Quaternionf(float euler_x, float euler_y, float euler_z, AngleUnit unit, EulerOrder order)
Definition: quaternion.h:197
Quaternionx< Type > operator*(const Quaternionx< Type > &mult) const
Multiplication operator.
Definition: quaternion.h:150
Type w
The real scalar part.
Definition: quaternion.h:50
Quaternionx(Type real, const Vec3< Type > &imag)
Definition: quaternion.h:59
Quaternion - Double.
Definition: quaternion.h:204
Quaternionx< Type > & normalize()
Normalizes this quaternion.
Quaternionx< Type > & inverse()
Inverse this quaternion.
bool operator==(const Quaternionx< Type > &other) const
Equal operator.
Definition: quaternion.h:179
Quaternionx()
Definition: quaternion.h:57
static Quaternionx< Type > slerp(const Quaternionx< Type > &quaternion_initial, const Quaternionx< Type > &quaternion_final, Type slerp_time)
Spherical Quaternion Interpolation.
Quaternionf(const Mat4< float > &rotation_matrix)
Definition: quaternion.h:193
static Quaternionx< Type > normalize(Quaternionx< Type > q)
Normalizes this quaternion.
Definition: quaternion.h:136
Quaternionf()
Definition: quaternion.h:191
Type y
Definition: quaternion.h:54
Quaternionf(float real, const Vec3< float > &imag)
Definition: quaternion.h:196
Type z
Definition: quaternion.h:55
Quaternionf(const Angle &euler_x, const Angle &euler_y, const Angle &euler_z, EulerOrder order)
Definition: quaternion.h:199
Quaternionf(float real, float i, float j, float k)
Definition: quaternion.h:195
static Quaternionx< Type > lerp(const Quaternionx< Type > &quaternion_initial, const Quaternionx< Type > &quaternion_final, Type lerp_time)
Linear Quaternion Interpolation.
Quaterniond(double real, const Vec3< double > &imag)
Definition: quaternion.h:211
Quaterniond(double euler_x, double euler_y, double euler_z, AngleUnit unit, EulerOrder order)
Definition: quaternion.h:212
AngleUnit
Angle unit.
Definition: angle.h:44
Vec3< Type > rotate_vector(const Vec3< Type > &v) const
Rotates vector by this quaternion.
Quaternion.
Definition: mat4.h:71
static Quaternionx< Type > multiply(const Quaternionx< Type > &quaternion_1, const Quaternionx< Type > &quaternion_2)
bool operator>=(const Quaternionx< Type > &other) const
Greater equal operator.
Definition: quaternion.h:176
Quaternionx(Type real, Type i, Type j, Type k)
Definition: quaternion.h:58
Type x
Definition: quaternion.h:53
Quaterniond()
Definition: quaternion.h:207
static Quaternionx< Type > axis_angle(const Angle &angle, const Vec3f &axis)
Quaternion - Float.
Definition: quaternion.h:188
Quaternionx< Type > & rotate(const Angle &angle, const Vec3f &axis)
static Quaternionx< Type > inverse(Quaternionx< Type > q)
Inverse this quaternion.
Definition: quaternion.h:143
3D vector
Definition: line_ray.h:49
Mat4< Type > to_matrix() const
Convert the quaternion to a rotation matrix.
Quaternionf(const Vec3< float > &euler, AngleUnit unit, EulerOrder order)
Definition: quaternion.h:198
void set(Type euler_x, Type euler_y, Type euler_z, AngleUnit unit, EulerOrder order)
Quaternionf(const Quaternionx< float > ©)
Definition: quaternion.h:192
static Quaternionx< Type > rotation_between(Vec3< Type > v0, Vec3< Type > v1)
Calculates the shortest arc quaternion between two vectors.
Quaternionx(const Quaternionx< Type > ©)
Definition: quaternion.h:60
Type magnitude() const
Get the quaternion magnitude.
EulerOrder
Euler angle rotation order.
Definition: angle.h:51
Quaterniond(const Quaternionx< double > ©)
Definition: quaternion.h:208
4D matrix
Definition: mat2.h:52
Quaterniond(const Angle &euler_x, const Angle &euler_y, const Angle &euler_z, EulerOrder order)
Definition: quaternion.h:214
Type j
Definition: quaternion.h:54
bool operator>(const Quaternionx< Type > &other) const
Greater operator.
Definition: quaternion.h:164
4D vector
Definition: size.h:48
Type i
Definition: quaternion.h:53
Quaterniond(const Mat4< double > &rotation_matrix)
Definition: quaternion.h:209
Type k
Definition: quaternion.h:55
Quaterniond(double real, double i, double j, double k)
Definition: quaternion.h:210
bool operator!=(const Quaternionx< Type > &other) const
Not equal operator.
Definition: quaternion.h:182