Quaternion
The Quaternion type provides a highly optimized and flexible container for quaternion-based 3D rotations. It supports efficient storage, manipulation, and arithmetic operations, and is designed for performance-critical applications such as animation, physics, and spatial transformations. Quaternion is available in multiple scalar type variants, and includes seamless conversions from vector and matrix representations.
Quaternion has a 16-byte alignment to ensure optimal performance and compatibility with SIMD operations.
SIMD types can be used as template parameters for structure of array (SOA) calculations.
#include <math/TellusimQuaternion.h>
Quaternionf
A quaternion with 32-bit floating-point precision.
Quaterniond
A quaternion with 64-bit floating-point precision.
Variables
Type | Name | Description |
---|---|---|
Type | x, y, z, w | Individual components. |
Vector4 | vec | Vector4 access. |
Type | q[4] | Array access. |
Constants
Type | Name | Description |
---|---|---|
Quaternion | zero | Zero quaternion. |
Quaternion | identity | Identity quaternion. |
Constructors
Quaternion()
Quaternion(const Quaternion &q)
Quaternion(Type x, Type y, Type z, Type w)
Quaternion(const Vector3 &axis, Type angle)
explicit Quaternion(const Type *q)
explicit Quaternion(const Matrix4x3 &m)
explicit Quaternion(const Matrix4x4 &m)
explicit Quaternion(const Vector4 &vector)
explicit Quaternion(const Quaternion<CType> &q)
Methods
Update quaternion data.
void set(Type X, Type Y, Type Z, Type W)
void set(const Type *q)
void get(Type *q) const
Quaternion to quaternion operators.
Quaternion &operator*=(const Quaternion &q)
Quaternion &operator+=(const Quaternion &q)
Quaternion &operator-=(const Quaternion &q)
Identity quaternion.
void setIdentity()
bool isIdentity() const
Rotation quaternion.
void setRotateX(Type angle)
void setRotateY(Type angle)
void setRotateZ(Type angle)
void setRotateXYZ(const Vector3 &angles)
void setRotateZYX(const Vector3 &angles)
void setRotate(const Vector3 &axis, Type angle)
Type getRotateX() const
Type getRotateY() const
Type getRotateZ() const
Vector3 getRotateXYZ() const
Vector3 getRotateZYX() const
Vector3 getRotate() const
void getRotate(Vector3 &axis, Type &angle) const
void setRotate(Type x, Type y, Type z, Type angle)
static Quaternion rotateX(Type angle)
static Quaternion rotateY(Type angle)
static Quaternion rotateZ(Type angle)
static Quaternion rotateXYZ(const Vector3 &angles)
static Quaternion rotateZYX(const Vector3 &angles)
static Quaternion rotate(const Vector3 &axis, Type angle)
static Quaternion rotateXYZ(Type angle_x, Type angle_y, Type angle_z)
static Quaternion rotateZYX(Type angle_x, Type angle_y, Type angle_z)
static Quaternion rotate(Type axis_x, Type axis_y, Type axis_z, Type angle)
Quaternion to/from matrix.
void set(const Vector4 &row_0, const Vector4 &row_1, const Vector4 &row_2)
void get(Vector4 &row_0, Vector4 &row_1, Vector4 &row_2) const
Quaternion data.
const Type &operator[](uint32_t index) const
Type &operator[](uint32_t index)
Operators
Unary operators.
Quaternion operator-(const Quaternion &q)
Quaternion to scalar multiplications.
Quaternion operator*(const Quaternion &q0, const Type &v1)
Quaternion to vector multiplications.
Vector2 operator*(const Quaternion &q, const Vector2 &v)
Vector3 operator*(const Quaternion &q, const Vector3 &v)
Vector4 operator*(const Quaternion &q, const Vector4 &v)
Vector to quaternion multiplications.
Vector2 operator*(const Vector2 &v, const Quaternion &q)
Vector3 operator*(const Vector3 &v, const Quaternion &q)
Vector4 operator*(const Vector4 &v, const Quaternion &q)
Quaternion to quaternion multiplication.
Quaternion operator*(const Quaternion &q0, const Quaternion &q1)
Comparison operators.
bool operator==(const Quaternion &q0, const Quaternion &q1)
bool operator!=(const Quaternion &q0, const Quaternion &q1)
bool compare(const Quaternion &q0, const Quaternion &q1, const Type &a)
bool compare(const Quaternion &q0, const Quaternion &q1, const Type &a, const Type &r)
Functions
Quaternion functions.
Type dot(const Quaternion &q0, const Quaternion &q1)
Type length2(const Quaternion &q0, const Quaternion &q1)
Type length(const Quaternion &q0, const Quaternion &q1)
Quaternion normalize(const Quaternion &q)
Quaternion inverse(const Quaternion &q)
Quaternion interpolation.
Quaternion<float32_t> lerp(const Quaternion<float32_t> &q0, const Quaternion<float32_t> &q1, float32_t k)
Quaternion<float64_t> lerp(const Quaternion<float64_t> &q0, const Quaternion<float64_t> &q1, float64_t k)
Quaternion<float32_t> slerp(const Quaternion<float32_t> &q0, const Quaternion<float32_t> &q1, float32_t k)
Quaternion<float64_t> slerp(const Quaternion<float64_t> &q0, const Quaternion<float64_t> &q1, float64_t k)