Skip to content

File syn_quaternion.h

File List > src > syntropic > util > syn_quaternion.h

Go to the documentation of this file

#ifndef SYN_QUATERNION_H
#define SYN_QUATERNION_H

#include "../common/syn_defs.h"
#include "syn_matrix.h"
#include "syn_qmath.h"

#include <stdbool.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    q16_t w; 
    q16_t x; 
    q16_t y; 
    q16_t z; 
} SYN_Quaternion;

void syn_quat_identity(SYN_Quaternion *q);

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

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

q16_t syn_quat_norm(const SYN_Quaternion *q);

SYN_Status syn_quat_normalize(SYN_Quaternion *q);

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

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

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

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

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

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

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

#ifdef __cplusplus
}
#endif

#endif /* SYN_QUATERNION_H */