src/quaternion.c file

Functions

auto quat_identity(void) -> quaternion
Constructs the identity quaternion.
auto quat_mul(const quaternion a, const quaternion b) -> quaternion
Multiplies two quaternions (a * b).
auto quat_normalize(const quaternion q) -> quaternion
Normalizes a quaternion.
auto quat_from_euler(const vector3 euler) -> quaternion
Constructs a quaternion from Euler angles.
auto quat_from_euler_deg(const vector3 euler_deg) -> quaternion
Constructs a quaternion from Euler angles in degrees.
auto quat_to_mat4(const quaternion q) -> matrix4
Converts a quaternion to a 4x4 rotation matrix.
auto quat_conjugate(const quaternion q) -> quaternion
Returns the conjugate of a quaternion.
auto quat_inverse(const quaternion q) -> quaternion
Returns the inverse of a quaternion.
auto quat_from_axis_angle(const vector3 axis, const vm_float_t radians) -> quaternion
Constructs a quaternion from a rotation axis and angle.
auto quat_from_axis_angle_deg(const vector3 axis, const vm_float_t degrees) -> quaternion
Constructs a quaternion from an axis and an angle in degrees.
auto quat_from_mat3(const matrix3 m) -> quaternion
Builds a quaternion from a 3x3 rotation matrix.
auto quat_from_mat4(const matrix4 m) -> quaternion
Builds a quaternion from the rotation of a 4x4 matrix.
auto quat_slerp(const quaternion a, const quaternion b, const vm_float_t t) -> quaternion
Spherical-linearly interpolates from a to b by t.
auto quat_nlerp(const quaternion a, const quaternion b, const vm_float_t t) -> quaternion
Normalized-linearly interpolates from a to b by t.
auto quat_rotate_vec3(const quaternion q, const vector3 v) -> vector3
Rotates a vector3 by a quaternion.
auto quat_to_euler(const quaternion q) -> vector3
Converts a quaternion to Euler angles in degrees (XYZ).
auto quat_to_euler_deg(const quaternion q) -> vector3
Converts a quaternion to Euler angles in degrees.
auto quat_to_axis_angle(const quaternion q, vm_float_t* radians) -> vector3
Converts a quaternion to axis-angle representation.
auto quat_to_axis_angle_deg(const quaternion q, vm_float_t* degrees) -> vector3
Converts a quaternion to axis-angle representation in degrees.
auto quat_to_mat3(const quaternion q) -> matrix3
Converts a quaternion to a 3x3 rotation matrix.
auto quat_dot(const quaternion a, const quaternion b) -> vm_float_t
Returns the dot product of two quaternions.
auto quat_near(const quaternion a, const quaternion b, const vm_float_t eps) -> bool
Returns true if a and b are within eps of each other.
auto quat_integrate(const quaternion q, const vector3 omega, const vm_float_t dt) -> quaternion
Integrates a quaternion using angular velocity.
auto quat_look(const vector3 direction, const vector3 up) -> quaternion
Constructs a quaternion that rotates from the negative Z axis towards the given direction, with the specified up vector.
auto quat_look_clip(const vector3 direction, const vector3 up, const vm_clip_t clip) -> quaternion
Constructs a quaternion representing a look-at rotation with specified clip space.
auto quat_from_to(const vector3 from, const vector3 to) -> quaternion
Constructs a quaternion representing the shortest rotation from one vector to another.

Function documentation

quaternion quat_identity(void)

Constructs the identity quaternion.

Returns The identity quaternion.

quaternion quat_mul(const quaternion a, const quaternion b)

Multiplies two quaternions (a * b).

Parameters
a The first quaternion.
b The second quaternion.
Returns The resulting product quaternion.

quaternion quat_normalize(const quaternion q)

Normalizes a quaternion.

Parameters
q The input quaternion.
Returns The normalized quaternion.

quaternion quat_from_euler(const vector3 euler)

Constructs a quaternion from Euler angles.

Parameters
euler Euler angles in radians.
Returns The resulting quaternion.

quaternion quat_from_euler_deg(const vector3 euler_deg)

Constructs a quaternion from Euler angles in degrees.

Parameters
euler_deg Euler angles in degrees.
Returns The resulting quaternion.

matrix4 quat_to_mat4(const quaternion q)

Converts a quaternion to a 4x4 rotation matrix.

Parameters
q The input quaternion.
Returns The equivalent matrix4.

quaternion quat_conjugate(const quaternion q)

Returns the conjugate of a quaternion.

Parameters
q Input quaternion.
Returns The resulting quaternion.

quaternion quat_inverse(const quaternion q)

Returns the inverse of a quaternion.

Parameters
q Input quaternion.
Returns The resulting quaternion.

quaternion quat_from_axis_angle(const vector3 axis, const vm_float_t radians)

Constructs a quaternion from a rotation axis and angle.

Parameters
axis The rotation axis. Must be normalized.
radians The rotation angle in radians.
Returns The resulting rotation quaternion.

quaternion quat_from_axis_angle_deg(const vector3 axis, const vm_float_t degrees)

Constructs a quaternion from an axis and an angle in degrees.

Parameters
axis The rotation axis.
degrees The rotation angle in degrees.
Returns The resulting quaternion.

quaternion quat_from_mat3(const matrix3 m)

Builds a quaternion from a 3x3 rotation matrix.

Parameters
m Input matrix.
Returns The resulting quaternion.

quaternion quat_from_mat4(const matrix4 m)

Builds a quaternion from the rotation of a 4x4 matrix.

Parameters
m Input matrix.
Returns The resulting quaternion.

quaternion quat_slerp(const quaternion a, const quaternion b, const vm_float_t t)

Spherical-linearly interpolates from a to b by t.

Parameters
a First input quaternion.
b Second input quaternion.
t Interpolation factor.
Returns The resulting quaternion.

quaternion quat_nlerp(const quaternion a, const quaternion b, const vm_float_t t)

Normalized-linearly interpolates from a to b by t.

Parameters
a First input quaternion.
b Second input quaternion.
t Interpolation factor.
Returns The resulting quaternion.

vector3 quat_rotate_vec3(const quaternion q, const vector3 v)

Rotates a vector3 by a quaternion.

Parameters
q Input quaternion.
v Input vector.
Returns The resulting vector3.

vector3 quat_to_euler(const quaternion q)

Converts a quaternion to Euler angles in degrees (XYZ).

Parameters
q Input quaternion.
Returns The resulting vector3.

vector3 quat_to_euler_deg(const quaternion q)

Converts a quaternion to Euler angles in degrees.

Parameters
q The quaternion to convert.
Returns The Euler angles in degrees as a vector3.

vector3 quat_to_axis_angle(const quaternion q, vm_float_t* radians)

Converts a quaternion to axis-angle representation.

Parameters
q The input quaternion.
radians Pointer to a float that receives the rotation angle in radians.
Returns The rotation axis vector.

vector3 quat_to_axis_angle_deg(const quaternion q, vm_float_t* degrees)

Converts a quaternion to axis-angle representation in degrees.

Parameters
q Input quaternion.
degrees Pointer to a float that receives the rotation angle in degrees.
Returns The rotation axis vector.

matrix3 quat_to_mat3(const quaternion q)

Converts a quaternion to a 3x3 rotation matrix.

Parameters
q Input quaternion.
Returns The resulting matrix3.

vm_float_t quat_dot(const quaternion a, const quaternion b)

Returns the dot product of two quaternions.

Parameters
a First input quaternion.
b Second input quaternion.
Returns The resulting vm_float_t.

bool quat_near(const quaternion a, const quaternion b, const vm_float_t eps)

Returns true if a and b are within eps of each other.

Parameters
a First input quaternion.
b Second input quaternion.
eps Distance tolerance.
Returns True if a and b are within eps.

quaternion quat_integrate(const quaternion q, const vector3 omega, const vm_float_t dt)

Integrates a quaternion using angular velocity.

Parameters
q The starting quaternion.
omega Angular velocity vector.
dt Time delta.
Returns The integrated quaternion.

quaternion quat_look(const vector3 direction, const vector3 up)

Constructs a quaternion that rotates from the negative Z axis towards the given direction, with the specified up vector.

Parameters
direction The target direction vector to look towards.
up The up vector.
Returns The look rotation quaternion.

quaternion quat_look_clip(const vector3 direction, const vector3 up, const vm_clip_t clip)

Constructs a quaternion representing a look-at rotation with specified clip space.

Parameters
direction The forward direction vector.
up The up direction vector.
clip The clip space convention.
Returns The look-at quaternion.

quaternion quat_from_to(const vector3 from, const vector3 to)

Constructs a quaternion representing the shortest rotation from one vector to another.

Parameters
from The source direction vector.
to The target direction vector.
Returns Quaternion that rotates from into to.