Skip to content

File syn_quaternion.h

FileList > src > syntropic > util > syn_quaternion.h

Go to the source code of this file

Fixed-point Q16.16 3D Quaternion operations — zero heap allocation.

  • #include "../common/syn_defs.h"
  • #include "syn_matrix.h"
  • #include "syn_qmath.h"
  • #include <stdbool.h>
  • #include <stdint.h>

Classes

Type Name
struct SYN_Quaternion
3D Quaternion representation (w + xi + yj + zk).

Public Functions

Type Name
void syn_quat_conjugate (const SYN_Quaternion * q, SYN_Quaternion * out)
Calculate quaternion conjugate q* = (w, -x, -y, -z).
void syn_quat_from_euler (SYN_Quaternion * q, q16_t roll, q16_t pitch, q16_t yaw)
Create orientation quaternion from Euler angles (roll, pitch, yaw) in Q16 radians (Z-Y-X sequence).
void syn_quat_identity (SYN_Quaternion * q)
Initialize identity quaternion q = (1, 0, 0, 0).
void syn_quat_init (SYN_Quaternion * q, q16_t w, q16_t x, q16_t y, q16_t z)
Initialize quaternion with given components.
SYN_Status syn_quat_inverse (const SYN_Quaternion * q, SYN_Quaternion * out)
Calculate quaternion inverse q^-1 = q* / |q|^2.
void syn_quat_mul (const SYN_Quaternion * q1, const SYN_Quaternion * q2, SYN_Quaternion * out)
Quaternion multiplication q_out = q1 * q2 (Hamilton product).
q16_t syn_quat_norm (const SYN_Quaternion * q)
Calculate quaternion norm (magnitude).
SYN_Status syn_quat_normalize (SYN_Quaternion * q)
Normalize quaternion to unit length.
void syn_quat_rotate_vec3 (const SYN_Quaternion * q, const q16_t * v, q16_t * out)
Rotate a 3D vector v by unit quaternion q: v_out = q * v * q*.
void syn_quat_slerp (const SYN_Quaternion * q1, const SYN_Quaternion * q2, q16_t t, SYN_Quaternion * out)
Spherical linear interpolation (SLERP) between q1 and q2 by factor t (0.0 to 1.0 in Q16).
void syn_quat_to_euler (const SYN_Quaternion * q, q16_t * roll, q16_t * pitch, q16_t * yaw)
Extract Euler angles (roll, pitch, yaw) in Q16 radians from unit quaternion.
void syn_quat_to_mat3x3 (const SYN_Quaternion * q, SYN_Matrix * out)
Convert unit quaternion to 3x3 rotation matrix.

Public Functions Documentation

function syn_quat_conjugate

Calculate quaternion conjugate q* = (w, -x, -y, -z).

void syn_quat_conjugate (
    const SYN_Quaternion * q,
    SYN_Quaternion * out
) 


function syn_quat_from_euler

Create orientation quaternion from Euler angles (roll, pitch, yaw) in Q16 radians (Z-Y-X sequence).

void syn_quat_from_euler (
    SYN_Quaternion * q,
    q16_t roll,
    q16_t pitch,
    q16_t yaw
) 


function syn_quat_identity

Initialize identity quaternion q = (1, 0, 0, 0).

void syn_quat_identity (
    SYN_Quaternion * q
) 


function syn_quat_init

Initialize quaternion with given components.

void syn_quat_init (
    SYN_Quaternion * q,
    q16_t w,
    q16_t x,
    q16_t y,
    q16_t z
) 


function syn_quat_inverse

Calculate quaternion inverse q^-1 = q* / |q|^2.

SYN_Status syn_quat_inverse (
    const SYN_Quaternion * q,
    SYN_Quaternion * out
) 

Returns:

SYN_OK on success, SYN_ERROR if zero magnitude.


function syn_quat_mul

Quaternion multiplication q_out = q1 * q2 (Hamilton product).

void syn_quat_mul (
    const SYN_Quaternion * q1,
    const SYN_Quaternion * q2,
    SYN_Quaternion * out
) 

Parameters:

  • q1 First quaternion operand.
  • q2 Second quaternion operand.
  • out Output product quaternion. May alias q1 or q2.

function syn_quat_norm

Calculate quaternion norm (magnitude).

q16_t syn_quat_norm (
    const SYN_Quaternion * q
) 


function syn_quat_normalize

Normalize quaternion to unit length.

SYN_Status syn_quat_normalize (
    SYN_Quaternion * q
) 

Returns:

SYN_OK on success, SYN_ERROR if zero magnitude.


function syn_quat_rotate_vec3

Rotate a 3D vector v by unit quaternion q: v_out = q * v * q*.

void syn_quat_rotate_vec3 (
    const SYN_Quaternion * q,
    const q16_t * v,
    q16_t * out
) 

Parameters:

  • q Unit quaternion rotation.
  • v Input 3D vector (3 elements).
  • out Output rotated 3D vector (3 elements). May alias v.

function syn_quat_slerp

Spherical linear interpolation (SLERP) between q1 and q2 by factor t (0.0 to 1.0 in Q16).

void syn_quat_slerp (
    const SYN_Quaternion * q1,
    const SYN_Quaternion * q2,
    q16_t t,
    SYN_Quaternion * out
) 

Parameters:

  • q1 Start unit quaternion (t = 0).
  • q2 End unit quaternion (t = 1).
  • t Interpolation parameter [0, Q16_ONE].
  • out Output interpolated unit quaternion.

function syn_quat_to_euler

Extract Euler angles (roll, pitch, yaw) in Q16 radians from unit quaternion.

void syn_quat_to_euler (
    const SYN_Quaternion * q,
    q16_t * roll,
    q16_t * pitch,
    q16_t * yaw
) 


function syn_quat_to_mat3x3

Convert unit quaternion to 3x3 rotation matrix.

void syn_quat_to_mat3x3 (
    const SYN_Quaternion * q,
    SYN_Matrix * out
) 

Parameters:

  • q Unit quaternion.
  • out Output 3x3 rotation matrix.


The documentation for this class was generated from the following file src/syntropic/util/syn_quaternion.h