28#ifndef __FREEWRL_QUATERNION_H__
29#define __FREEWRL_QUATERNION_H__
53#define MATHEMATICS_MAT00 mat[0]
54#define MATHEMATICS_MAT01 mat[4]
55#define MATHEMATICS_MAT02 mat[8]
56#define MATHEMATICS_MAT03 mat[12]
57#define MATHEMATICS_MAT10 mat[1]
58#define MATHEMATICS_MAT11 mat[5]
59#define MATHEMATICS_MAT12 mat[9]
60#define MATHEMATICS_MAT13 mat[13]
61#define MATHEMATICS_MAT20 mat[2]
62#define MATHEMATICS_MAT21 mat[6]
63#define MATHEMATICS_MAT22 mat[10]
64#define MATHEMATICS_MAT23 mat[14]
65#define MATHEMATICS_MAT30 mat[3]
66#define MATHEMATICS_MAT31 mat[7]
67#define MATHEMATICS_MAT32 mat[11]
68#define MATHEMATICS_MAT33 mat[15]
77matrix_to_quaternion (Quaternion *quat,
double *mat) ;
79quaternion_to_matrix (
double *mat, Quaternion *quat) ;
81void scale_to_matrix (
double *mat,
struct point_XYZ *scale);
84vrmlrot_to_quaternion(Quaternion *quat,
89void vrmlrot4d_to_quaternion(Quaternion *quat,
const double *xyza);
90void vrmlrot4f_to_quaternion(Quaternion *quat,
const float *xyza);
92quaternion_to_vrmlrot(
const Quaternion *quat,
97void quaternion_to_vrmlrot4d(
const Quaternion *quat,
double *xyza);
99void quaternion_to_vrmlrot4f(
const Quaternion *quat,
float *rot);
101quaternion_conjugate(Quaternion *quat);
104quaternion_inverse(Quaternion *ret,
105 const Quaternion *quat);
108quaternion_norm(
const Quaternion *quat);
111quaternion_normalize(Quaternion *quat);
114quaternion_add(Quaternion *ret,
115 const Quaternion *q1,
116 const Quaternion *q2);
119quaternion_multiply(Quaternion *ret,
120 const Quaternion *q1,
121 const Quaternion *q2);
124quaternion_scalar_multiply(Quaternion *quat,
128quaternion_rotation(
struct point_XYZ *ret,
129 const Quaternion *quat,
132quaternion_rotationd(
double *ret, Quaternion *quat,
double *v);
135quaternion_rotation3f(
float *ret, Quaternion *quat,
float *v);
138quaternion_togl(Quaternion *quat);
141quaternion_set(Quaternion *ret,
142 const Quaternion *quat);
145quaternion_slerp(Quaternion *ret,
146 const Quaternion *q1,
147 const Quaternion *q2,
149void quaternion_print(
const Quaternion *quat,
char* description );
150void double2quat(Quaternion *quat,
double *quat4);
151void quat2double(
double *quat4,Quaternion *quat);
152void quat2euler(
double *rxyz,
int iaxis_halfcircle, Quaternion *q);
153void quat2yawpitch(
double *ypr, Quaternion *q);
154void euler2quat1(Quaternion *qout,
double *axyz);
155void euler2quat(Quaternion *qout,
double heading,
double attitude,
double bank);
157double rad2deg(
double rad);
158void loadIdentityMatrix (
double *);
159void vrmlrot_multiply(
float* ret,
float *a,
float *b);
160void vrmlrot_normalize(
float *ret);