Vecmat 0.2.3
C math and linear algebra library for 2D/3D graphics, physics, and science.
Loading...
Searching...
No Matches
quaternion.c
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2025-2026 Igal Alkon
2// SPDX-FileCopyrightText: 2026 ALKONTEK <git@alkontek.com>
3// SPDX-License-Identifier: BSD-3-Clause
4
5#include <vecmat.h>
6
15{
16 quaternion res;
18 return res;
19}
20
31{
32 quaternion res;
33 quat_mul_ptr(&res, &a, &b);
34 return res;
35}
36
46{
47 quaternion res;
48 quat_normalize_ptr(&res, &q);
49 return res;
50}
51
61{
62 quaternion res;
63 quat_from_euler_ptr(&res, &euler);
64 return res;
65}
66
76{
77 matrix4 res;
78 quat_to_mat4_ptr(&res, &q);
79 return res;
80}
81
91{
92 quaternion res;
93 quat_conjugate_ptr(&res, &q);
94 return res;
95}
96
106{
107 quaternion res;
108 quat_inverse_ptr(&res, &q);
109 return res;
110}
111
122{
123 quaternion res;
124 quat_from_axis_angle_ptr(&res, &axis, degrees);
125 return res;
126}
127
137{
138 quaternion res;
139 quat_from_mat3_ptr(&res, &m);
140 return res;
141}
142
152{
153 quaternion res;
154 quat_from_mat4_ptr(&res, &m);
155 return res;
156}
157
169{
170 quaternion res;
171 quat_slerp_ptr(&res, &a, &b, t);
172 return res;
173}
174
186{
187 quaternion res;
188 quat_nlerp_ptr(&res, &a, &b, t);
189 return res;
190}
191
202{
203 vector3 res;
204 quat_rotate_vec3_ptr(&res, &q, &v);
205 return res;
206}
207
217{
218 vector3 res;
219 quat_to_euler_ptr(&res, &q);
220 return res;
221}
222
233{
234 vector3 axis;
235 quat_to_axis_angle_ptr(&axis, degrees, &q);
236 return axis;
237}
238
248{
249 matrix3 res;
250 quat_to_mat3_ptr(&res, &q);
251 return res;
252}
253
262{
263 return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
264}
265
274bool quat_near(const quaternion a, const quaternion b, const vm_float_t eps)
275{
276 return VECMAT_FABS(a.x - b.x) <= eps
277 && VECMAT_FABS(a.y - b.y) <= eps
278 && VECMAT_FABS(a.z - b.z) <= eps
279 && VECMAT_FABS(a.w - b.w) <= eps;
280}
quaternion quat_from_mat3(const matrix3 m)
Builds a quaternion from a 3x3 rotation matrix.
Definition quaternion.c:136
quaternion quat_from_euler(const vector3 euler)
Constructs a quaternion from Euler angles (in radians, XYZ order).
Definition quaternion.c:60
quaternion quat_mul(const quaternion a, const quaternion b)
Multiplies two quaternions (a * b).
Definition quaternion.c:30
matrix3 quat_to_mat3(const quaternion q)
Converts a quaternion to a 3x3 rotation matrix.
Definition quaternion.c:247
vector3 quat_to_euler(const quaternion q)
Converts a quaternion to Euler angles in degrees (XYZ).
Definition quaternion.c:216
vector3 quat_rotate_vec3(const quaternion q, const vector3 v)
Rotates a vector3 by a quaternion.
Definition quaternion.c:201
vector3 quat_to_axis_angle(const quaternion q, vm_float_t *degrees)
Converts a quaternion to an axis and an angle in degrees.
Definition quaternion.c:232
quaternion quat_identity(void)
Constructs the identity quaternion.
Definition quaternion.c:14
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.
Definition quaternion.c:274
quaternion quat_nlerp(const quaternion a, const quaternion b, const vm_float_t t)
Normalized-linearly interpolates from a to b by t.
Definition quaternion.c:185
quaternion quat_from_mat4(const matrix4 m)
Builds a quaternion from the rotation of a 4x4 matrix.
Definition quaternion.c:151
quaternion quat_conjugate(const quaternion q)
Returns the conjugate of a quaternion.
Definition quaternion.c:90
matrix4 quat_to_mat4(const quaternion q)
Converts a quaternion to a 4x4 rotation matrix.
Definition quaternion.c:75
quaternion quat_inverse(const quaternion q)
Returns the inverse of a quaternion.
Definition quaternion.c:105
quaternion quat_normalize(const quaternion q)
Normalizes a quaternion.
Definition quaternion.c:45
quaternion quat_from_axis_angle(const vector3 axis, const vm_float_t degrees)
Builds a quaternion from an axis and an angle in degrees.
Definition quaternion.c:121
quaternion quat_slerp(const quaternion a, const quaternion b, const vm_float_t t)
Spherical-linearly interpolates from a to b by t.
Definition quaternion.c:168
vm_float_t quat_dot(const quaternion a, const quaternion b)
Returns the dot product of two quaternions.
Definition quaternion.c:261
vm_float_t y
Definition vecmat.h:364
vm_float_t x
Definition vecmat.h:363
vm_float_t z
Definition vecmat.h:365
vm_float_t w
Definition vecmat.h:366
void quat_mul_ptr(quaternion *res, const quaternion *a, const quaternion *b)
void quat_rotate_vec3_ptr(vector3 *res, const quaternion *q, const vector3 *v)
Rotates a vector3 by a quaternion.
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_from_mat4_ptr(quaternion *res, const matrix4 *m)
Builds a quaternion from the rotation of a 4x4 matrix.
void quat_from_mat3_ptr(quaternion *res, const matrix3 *m)
Builds a quaternion from a 3x3 rotation matrix.
void quat_nlerp_ptr(quaternion *res, const quaternion *a, const quaternion *b, vm_float_t t)
Normalized-linearly interpolates from a to b by t.
void quat_to_euler_ptr(vector3 *res, const quaternion *q)
Converts a quaternion to Euler angles in degrees (XYZ).
void quat_slerp_ptr(quaternion *res, const quaternion *a, const quaternion *b, vm_float_t t)
Spherical-linearly interpolates from a to b by t.
void quat_to_mat3_ptr(matrix3 *res, const quaternion *q)
Converts a quaternion to a 3x3 rotation matrix.
void quat_from_axis_angle_ptr(quaternion *res, const vector3 *axis, vm_float_t degrees)
Builds a quaternion from an axis and an angle in degrees.
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.
double vm_float_t
Definition vecmat.h:79
void quat_normalize_ptr(quaternion *res, const quaternion *q)
#define VECMAT_FABS(x)
Definition vecmat.h:413
void quat_conjugate_ptr(quaternion *res, const quaternion *q)
Writes the conjugate of a quaternion.
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_identity_ptr(quaternion *res)
Sets the quaternion to the identity quaternion (x=0, y=0, z=0, w=1).
void quat_inverse_ptr(quaternion *res, const quaternion *q)
Writes the inverse of a quaternion.