23#define RAD2DEG(_rad) ((_rad) * (180.0 / M_PI))
24#define DEG2RAD(_deg) ((_deg) * (M_PI / 180.0))
26#define RAD2DEGF(_rad) ((_rad) * (float)(180.0 / M_PI))
27#define DEG2RADF(_deg) ((_deg) * (float)(M_PI / 180.0))
46void mul_qt_qtqt(
float q[4],
const float a[4],
const float b[4]);
66void mul_qt_v3(
const float q[4],
float r[3]);
77void sub_qt_qtqt(
float q[4],
const float a[4],
const float b[4]);
90float dot_qtqt(
const float a[4],
const float b[4]);
108void interp_qt_qtqt(
float q[4],
const float a[4],
const float b[4],
float t);
109void add_qt_qtqt(
float q[4],
const float a[4],
const float b[4],
float t);
139 const float no_orig[3]);
143float tri_to_quat(
float q[4],
const float a[3],
const float b[3],
const float c[3]);
144void vec_to_quat(
float q[4],
const float vec[3],
short axis,
short upflag);
210#define print_qt_id(q) print_qt(STRINGIFY(q), q)
291void eul_to_quat(
float quat[4],
const float eul[3]);
292void eul_to_mat3(
float mat[3][3],
const float eul[3]);
293void eul_to_mat4(
float mat[4][4],
const float eul[3]);
297void mat3_to_eul(
float eul[3],
const float mat[3][3]);
298void mat4_to_eul(
float eul[3],
const float mat[4][4]);
299void quat_to_eul(
float eul[3],
const float quat[4]);
304void rotate_eul(
float beul[3],
char axis,
float angle);
317void add_eul_euleul(
float r_eul[3],
float a[3],
float b[3],
short order);
318void sub_eul_euleul(
float r_eul[3],
float a[3],
float b[3],
short order);
351void eulO_to_mat4(
float mat[4][4],
const float e[3],
short order);
369void mat3_to_eulO(
float eul[3],
short order,
const float m[3][3]);
370void mat4_to_eulO(
float eul[3],
short order,
const float m[4][4]);
383 const float oldrot[3],
385 const float mat[3][3]);
387 const float oldrot[3],
389 const float mat[4][4]);
391 const float oldrot[3],
393 const float mat[3][3]);
395 const float oldrot[3],
397 const float mat[4][4]);
399 const float oldrot[3],
401 const float quat[4]);
403void rotate_eulO(
float beul[3],
short order,
char axis,
float angle);
416 const float pivot[3],
418 bool compute_scale_matrix);
449 int src_forward,
int src_up,
int dst_forward,
int dst_up,
float r_mat[3][3]);
float angle_compat_rad(float angle, float angle_compat)
void pow_qt_fl_normalized(float q[4], float fac)
void mat4_normalized_to_eulO(float eul[3], short order, const float m[4][4])
void quat_to_compatible_eulO(float eul[3], const float oldrot[3], short order, const float quat[4])
void rotation_between_quats_to_quat(float q[4], const float q1[4], const float q2[4])
void rotate_eulO(float beul[3], short order, char axis, float angle)
void sub_eul_euleul(float r_eul[3], float a[3], float b[3], short order)
float angle_qtqt(const float q1[4], const float q2[4])
void eulO_to_gimbal_axis(float gmat[3][3], const float eul[3], short order)
void axis_angle_to_mat3_single(float R[3][3], char axis, float angle)
float angle_signed_normalized_qtqt(const float q1[4], const float q2[4])
void rotation_between_vecs_to_quat(float q[4], const float v1[3], const float v2[3])
void interp_qt_qtqt(float q[4], const float a[4], const float b[4], float t)
void print_qt(const char *str, const float q[4])
void vec_apply_track(float vec[3], short axis)
float angle_normalized_qt(const float q[4])
float tri_to_quat(float q[4], const float a[3], const float b[3], const float c[3])
void mat3_normalized_to_compatible_eul(float eul[3], const float oldrot[3], float mat[3][3])
float angle_signed_qt(const float q[4])
void invert_qt_normalized(float q[4])
void invert_qt_qt(float q1[4], const float q2[4])
void conjugate_qt_qt(float q1[4], const float q2[4])
void axis_angle_normalized_to_mat3_ex(float mat[3][3], const float axis[3], float angle_sin, float angle_cos)
void eul_to_mat3(float mat[3][3], const float eul[3])
void axis_angle_to_quat(float r[4], const float axis[3], float angle)
void add_weighted_dq_dq(DualQuat *dq_sum, const DualQuat *dq, float weight)
void quat_to_mat3(float m[3][3], const float q[4])
void sin_cos_from_fraction(int numerator, int denominator, float *r_sin, float *r_cos)
void axis_angle_normalized_to_mat3(float R[3][3], const float axis[3], float angle)
void sub_qt_qtqt(float q[4], const float a[4], const float b[4])
void axis_angle_to_quat_single(float q[4], char axis, float angle)
void mat3_to_quat(float q[4], const float mat[3][3])
void vec_to_quat(float q[4], const float vec[3], short axis, short upflag)
void quat_to_eulO(float e[3], short order, const float q[4])
void mat4_to_eul(float eul[3], const float mat[4][4])
float normalize_qt(float q[4])
void invert_qt(float q[4])
void quat_normalized_to_expmap(float expmap[3], const float q[4])
void eulO_to_axis_angle(float axis[3], float *angle, const float eul[3], short order)
void quat_to_mat4(float m[4][4], const float q[4])
void dquat_to_mat4(float R[4][4], const DualQuat *dq)
void mul_qt_fl(float q[4], float f)
void mat4_normalized_to_axis_angle(float axis[3], float *angle, const float mat[4][4])
void mul_qt_v3(const float q[4], float r[3])
void angle_to_mat2(float R[2][2], float angle)
void eulO_to_quat(float q[4], const float e[3], short order)
void axis_angle_normalized_to_quat(float r[4], const float axis[3], float angle)
void mat4_normalized_to_compatible_eulO(float eul[3], const float oldrot[3], short order, const float mat[4][4])
void eul_to_quat(float quat[4], const float eul[3])
void axis_angle_to_mat4(float R[4][4], const float axis[3], float angle)
float fov_to_focallength(float hfov, float sensor)
void eulO_to_mat4(float mat[4][4], const float e[3], short order)
void mat3_to_quat_legacy(float q[4], const float wmat[3][3])
void mat4_to_axis_angle(float axis[3], float *angle, const float mat[4][4])
void mat4_normalized_to_eul(float eul[3], const float m[4][4])
float angle_signed_normalized_qt(const float q[4])
void quat_to_eul(float eul[3], const float quat[4])
float normalize_qt_qt(float r[4], const float q[4])
float dot_qtqt(const float a[4], const float b[4])
void invert_qt_qt_normalized(float q1[4], const float q2[4])
void mat4_to_eulO(float eul[3], short order, const float m[4][4])
bool is_zero_qt(const float q[4])
float quat_split_swing_and_twist(const float q_in[4], int axis, float r_swing[4], float r_twist[4])
void mat3_normalized_to_eul(float eul[3], const float mat[3][3])
void mul_qt_qtqt(float q[4], const float a[4], const float b[4])
void quat_to_axis_angle(float axis[3], float *angle, const float q[4])
void mat3_to_eul(float eul[3], const float mat[3][3])
void quat_to_expmap(float expmap[3], const float q[4])
void mat4_to_dquat(DualQuat *dq, const float basemat[4][4], const float mat[4][4])
void copy_dq_dq(DualQuat *r, const DualQuat *dq)
void mat3_to_compatible_eul(float eul[3], const float oldrot[3], float mat[3][3])
void axis_angle_to_eulO(float eul[3], short order, const float axis[3], float angle)
void mat4_to_quat(float q[4], const float mat[4][4])
void mat3_to_compatible_eulO(float eul[3], const float oldrot[3], short order, const float mat[3][3])
void rotation_between_vecs_to_mat3(float m[3][3], const float v1[3], const float v2[3])
bool mat3_from_axis_conversion(int src_forward, int src_up, int dst_forward, int dst_up, float r_mat[3][3])
void add_qt_qtqt(float q[4], const float a[4], const float b[4], float t)
float focallength_to_fov(float focal_length, float sensor)
void mul_v3m3_dq(float r[3], float R[3][3], DualQuat *dq)
void conjugate_qt(float q[4])
void compatible_eul(float eul[3], const float oldrot[3])
void quat_apply_track(float quat[4], short axis, short upflag)
void tri_to_quat_ex(float quat[4], const float v1[3], const float v2[3], const float v3[3], const float no_orig[3])
void mat4_normalized_to_quat(float q[4], const float mat[4][4])
void mat3_normalized_to_quat_fast(float q[4], const float mat[3][3])
void quat_to_compatible_eul(float eul[3], const float oldrot[3], const float quat[4])
void eulO_to_mat3(float M[3][3], const float e[3], short order)
void add_weighted_dq_dq_pivot(DualQuat *dq_sum, const DualQuat *dq, const float pivot[3], float weight, bool compute_scale_matrix)
float angle_wrap_deg(float angle)
void unit_axis_angle(float axis[3], float *angle)
void add_eul_euleul(float r_eul[3], float a[3], float b[3], short order)
void mat3_to_axis_angle(float axis[3], float *angle, const float mat[3][3])
float angle_qt(const float q[4])
void mat3_normalized_to_eulO(float eul[3], short order, const float m[3][3])
void copy_qt_qt(float q[4], const float a[4])
void axis_angle_to_mat4_single(float R[4][4], char axis, float angle)
float angle_wrap_rad(float angle)
void normalize_dq(DualQuat *dq, float totweight)
void quat_to_compatible_quat(float q[4], const float a[4], const float old[4])
void axis_angle_to_mat3(float R[3][3], const float axis[3], float angle)
void expmap_to_quat(float r[4], const float expmap[3])
void interp_dot_slerp(float t, float cosom, float r_w[2])
void mat3_to_eulO(float eul[3], short order, const float m[3][3])
void mat3_normalized_to_compatible_eulO(float eul[3], const float oldrot[3], short order, const float mat[3][3])
void mat3_normalized_to_quat(float q[4], const float mat[3][3])
float angle_signed_qtqt(const float q1[4], const float q2[4])
void mat3_normalized_to_axis_angle(float axis[3], float *angle, const float mat[3][3])
float angle_normalized_qtqt(const float q1[4], const float q2[4])
void rotate_eul(float beul[3], char axis, float angle)
void eul_to_mat4(float mat[4][4], const float eul[3])
void mat4_to_compatible_eulO(float eul[3], const float oldrot[3], short order, const float mat[4][4])
bool mat3_from_axis_conversion_single(int src_axis, int dst_axis, float r_mat[3][3])
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
local_group_size(16, 16) .push_constant(Type b