Vecmat 0.2.3
C math and linear algebra library for 2D/3D graphics, physics, and science.
Loading...
Searching...
No Matches
quaternion_ptr.c File Reference
#include <vecmat.h>
#include "features/cpu.h"

Go to the source code of this file.

Functions

void quat_identity_ptr (quaternion *res)
 Sets the quaternion to the identity quaternion (x=0, y=0, z=0, w=1).
VECMAT_SCALAR_API void quat_mul_ptr_scalar (quaternion *res, const quaternion *a, const quaternion *b)
 Multiplies two quaternions using Hamilton product (a * b) and stores the result in res.
void quat_mul_ptr (quaternion *res, const quaternion *a, const quaternion *b)
VECMAT_SCALAR_API void quat_normalize_ptr_scalar (quaternion *res, const quaternion *q)
 Normalizes the input quaternion and stores the result in res.
void quat_normalize_ptr (quaternion *res, const quaternion *q)
void quat_from_euler_ptr (quaternion *res, const vector3 *euler)
 Converts Euler angles (in degrees, XYZ order: pitch, yaw, roll) to a quaternion and stores in res.
void quat_to_mat4_ptr (matrix4 *res, const quaternion *q)
 Converts a unit quaternion to a 4x4 rotation matrix and stores in res.
void quat_conjugate_ptr (quaternion *res, const quaternion *q)
 Writes the conjugate of a quaternion.
void quat_inverse_ptr (quaternion *res, const quaternion *q)
 Writes the inverse of a quaternion.
void quat_from_axis_angle_ptr (quaternion *res, const vector3 *axis, const vm_float_t degrees)
 Builds a quaternion from an axis and an angle in degrees.
void quat_from_mat3_ptr (quaternion *res, const matrix3 *m)
 Builds a quaternion from a 3x3 rotation matrix.
void quat_from_mat4_ptr (quaternion *res, const matrix4 *m)
 Builds a quaternion from the rotation of a 4x4 matrix.
void quat_nlerp_ptr (quaternion *res, const quaternion *a, const quaternion *b, const vm_float_t t)
 Normalized-linearly interpolates from a to b by t.
void quat_slerp_ptr (quaternion *res, const quaternion *a, const quaternion *b, const vm_float_t t)
 Spherical-linearly interpolates from a to b by t.
void quat_rotate_vec3_ptr (vector3 *res, const quaternion *q, const vector3 *v)
 Rotates a vector3 by a quaternion.
void quat_to_euler_ptr (vector3 *res, const quaternion *q)
 Converts a quaternion to Euler angles in degrees (XYZ).
void quat_to_axis_angle_ptr (vector3 *axis, vm_float_t *degrees, const quaternion *q)
 Converts a quaternion to an axis and an angle in degrees.
void quat_to_mat3_ptr (matrix3 *res, const quaternion *q)
 Converts a quaternion to a 3x3 rotation matrix.

Function Documentation

◆ quat_conjugate_ptr()

void quat_conjugate_ptr ( quaternion * res,
const quaternion * q )

Writes the conjugate of a quaternion.

Parameters
resOutput value.
qInput quaternion.

Definition at line 149 of file quaternion_ptr.c.

References quaternion::w, quaternion::x, quaternion::y, and quaternion::z.

Referenced by quat_conjugate().

◆ quat_from_axis_angle_ptr()

void quat_from_axis_angle_ptr ( quaternion * res,
const vector3 * axis,
const vm_float_t degrees )

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

Parameters
resOutput value.
axisRotation axis.
degreesRotation angle in degrees.

Definition at line 184 of file quaternion_ptr.c.

References deg_to_rad(), vec3_normalize(), VECMAT_COS, VECMAT_SIN, quaternion::w, quaternion::x, vector3::x, quaternion::y, vector3::y, quaternion::z, and vector3::z.

Referenced by quat_from_axis_angle().

◆ quat_from_euler_ptr()

void quat_from_euler_ptr ( quaternion * res,
const vector3 * euler )

Converts Euler angles (in degrees, XYZ order: pitch, yaw, roll) to a quaternion and stores in res.

Internally converts to radians, computes quaternion, and normalizes.

Parameters
resPointer to the output quaternion.
eulerPointer to the input Euler angles vector.

Definition at line 91 of file quaternion_ptr.c.

References deg_to_rad(), quat_normalize_ptr(), VECMAT_COS, VECMAT_SIN, vector3::x, vector3::y, and vector3::z.

Referenced by quat_from_euler().

◆ quat_from_mat3_ptr()

void quat_from_mat3_ptr ( quaternion * res,
const matrix3 * m )

Builds a quaternion from a 3x3 rotation matrix.

Parameters
resOutput value.
mInput matrix.

Definition at line 201 of file quaternion_ptr.c.

References matrix3::m11, matrix3::m12, matrix3::m13, matrix3::m21, matrix3::m22, matrix3::m23, matrix3::m31, matrix3::m32, matrix3::m33, quat_normalize_ptr(), VECMAT_SQRT, quaternion::w, quaternion::x, quaternion::y, and quaternion::z.

Referenced by mat4_extract_rotation_ptr(), quat_from_mat3(), and quat_from_mat4_ptr().

◆ quat_from_mat4_ptr()

void quat_from_mat4_ptr ( quaternion * res,
const matrix4 * m )

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

Parameters
resOutput value.
mInput matrix.

Definition at line 238 of file quaternion_ptr.c.

References matrix4::m11, matrix4::m12, matrix4::m13, matrix4::m21, matrix4::m22, matrix4::m23, matrix4::m31, matrix4::m32, matrix4::m33, and quat_from_mat3_ptr().

Referenced by quat_from_mat4().

◆ quat_identity_ptr()

void quat_identity_ptr ( quaternion * res)

Sets the quaternion to the identity quaternion (x=0, y=0, z=0, w=1).

Parameters
resPointer to the quaternion to initialize.

Definition at line 13 of file quaternion_ptr.c.

References quaternion::w, quaternion::x, quaternion::y, and quaternion::z.

Referenced by quat_identity().

◆ quat_inverse_ptr()

void quat_inverse_ptr ( quaternion * res,
const quaternion * q )

Writes the inverse of a quaternion.

Parameters
resOutput value.
qInput quaternion.

Definition at line 163 of file quaternion_ptr.c.

References quaternion::w, quaternion::x, quaternion::y, and quaternion::z.

Referenced by quat_inverse(), and quat_rotate_vec3_ptr().

◆ quat_mul_ptr()

void quat_mul_ptr ( quaternion * res,
const quaternion * a,
const quaternion * b )

Definition at line 37 of file quaternion_ptr.c.

References quat_mul_ptr_scalar(), and vm_cpu_init().

Referenced by quat_mul(), and quat_rotate_vec3_ptr().

◆ quat_mul_ptr_scalar()

VECMAT_SCALAR_API void quat_mul_ptr_scalar ( quaternion * res,
const quaternion * a,
const quaternion * b )

Multiplies two quaternions using Hamilton product (a * b) and stores the result in res.

Parameters
resPointer to the output quaternion.
aPointer to the first quaternion.
bPointer to the second quaternion.

Definition at line 29 of file quaternion_ptr.c.

References VECMAT_SCALAR_API, quaternion::w, quaternion::x, quaternion::y, and quaternion::z.

Referenced by quat_mul_ptr().

◆ quat_nlerp_ptr()

void quat_nlerp_ptr ( quaternion * res,
const quaternion * a,
const quaternion * b,
const vm_float_t t )

Normalized-linearly interpolates from a to b by t.

Parameters
resOutput value.
aFirst input quaternion.
bSecond input quaternion.
tInterpolation factor.

Definition at line 256 of file quaternion_ptr.c.

References quat_dot(), quat_normalize_ptr(), quaternion::w, quaternion::x, quaternion::y, and quaternion::z.

Referenced by quat_nlerp(), and quat_slerp_ptr().

◆ quat_normalize_ptr()

void quat_normalize_ptr ( quaternion * res,
const quaternion * q )

◆ quat_normalize_ptr_scalar()

VECMAT_SCALAR_API void quat_normalize_ptr_scalar ( quaternion * res,
const quaternion * q )

Normalizes the input quaternion and stores the result in res.

If the quaternion length is zero, copies the input unchanged.

Parameters
resPointer to the output quaternion.
qPointer to the input quaternion.

Definition at line 55 of file quaternion_ptr.c.

References VECMAT_SCALAR_API, VECMAT_SQRT, quaternion::w, quaternion::x, quaternion::y, and quaternion::z.

Referenced by quat_normalize_ptr().

◆ quat_rotate_vec3_ptr()

void quat_rotate_vec3_ptr ( vector3 * res,
const quaternion * q,
const vector3 * v )

Rotates a vector3 by a quaternion.

Parameters
resOutput value.
qInput quaternion.
vInput vector.

Definition at line 314 of file quaternion_ptr.c.

References quat_inverse_ptr(), quat_mul_ptr(), quaternion::x, vector3::x, quaternion::y, vector3::y, quaternion::z, and vector3::z.

Referenced by quat_rotate_vec3().

◆ quat_slerp_ptr()

void quat_slerp_ptr ( quaternion * res,
const quaternion * a,
const quaternion * b,
const vm_float_t t )

Spherical-linearly interpolates from a to b by t.

Parameters
resOutput value.
aFirst input quaternion.
bSecond input quaternion.
tInterpolation factor.

Definition at line 282 of file quaternion_ptr.c.

References quat_dot(), quat_nlerp_ptr(), VECMAT_ACOS, VECMAT_SIN, quaternion::w, quaternion::x, quaternion::y, and quaternion::z.

Referenced by quat_slerp().

◆ quat_to_axis_angle_ptr()

void quat_to_axis_angle_ptr ( vector3 * axis,
vm_float_t * degrees,
const quaternion * q )

Converts a quaternion to an axis and an angle in degrees.

Parameters
axisOutput rotation axis.
degreesOptional output angle in degrees.
qInput quaternion.

Definition at line 364 of file quaternion_ptr.c.

References quat_normalize_ptr(), rad_to_deg(), VECMAT_ACOS, VECMAT_EPSILON, VECMAT_SQRT, quaternion::w, quaternion::x, vector3::x, quaternion::y, vector3::y, quaternion::z, and vector3::z.

Referenced by quat_to_axis_angle().

◆ quat_to_euler_ptr()

void quat_to_euler_ptr ( vector3 * res,
const quaternion * q )

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

Parameters
resOutput value.
qInput quaternion.

Definition at line 334 of file quaternion_ptr.c.

References M_PI_2, VECMAT_ASIN, VECMAT_ATAN2, VECMAT_COPYSIGN, VECMAT_FABS, VM_RAD_TO_DEG, quaternion::w, quaternion::x, vector3::x, quaternion::y, vector3::y, quaternion::z, and vector3::z.

Referenced by quat_to_euler().

◆ quat_to_mat3_ptr()

void quat_to_mat3_ptr ( matrix3 * res,
const quaternion * q )

Converts a quaternion to a 3x3 rotation matrix.

Parameters
resOutput value.
qInput quaternion.

Definition at line 391 of file quaternion_ptr.c.

References matrix3::m11, matrix4::m11, matrix3::m12, matrix4::m12, matrix3::m13, matrix4::m13, matrix3::m21, matrix4::m21, matrix3::m22, matrix4::m22, matrix3::m23, matrix4::m23, matrix3::m31, matrix4::m31, matrix3::m32, matrix4::m32, matrix3::m33, matrix4::m33, and quat_to_mat4_ptr().

Referenced by quat_to_mat3().

◆ quat_to_mat4_ptr()

void quat_to_mat4_ptr ( matrix4 * res,
const quaternion * q )

Converts a unit quaternion to a 4x4 rotation matrix and stores in res.

Starts with the identity matrix and applies rotation components.

Parameters
resPointer to the output matrix4.
qPointer to the input quaternion (should be normalized).

Definition at line 118 of file quaternion_ptr.c.

References matrix4::m11, matrix4::m12, matrix4::m13, matrix4::m21, matrix4::m22, matrix4::m23, matrix4::m31, matrix4::m32, matrix4::m33, mat4_identity_ptr(), quaternion::w, quaternion::x, quaternion::y, and quaternion::z.

Referenced by mat4_trs_ptr(), quat_to_mat3_ptr(), and quat_to_mat4().