Skip to main content

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.

info

Quaternion has a 16-byte alignment to ensure optimal performance and compatibility with SIMD operations.

info

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

TypeNameDescription
Typex, y, z, wIndividual components.
Vector4vecVector4 access.
Typeq[4]Array access.

Constants

TypeNameDescription
QuaternionzeroZero quaternion.
QuaternionidentityIdentity 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)