39 #include "../quaternion.h" 40 #include "../vector.h" 41 #include "../fixed_point.h" 54 #define _QTR(e) s.e = df_to_f(q.e) 74 frac _0_5 = {FRAC_0_5_V};
216 #define _QSUM(e) s.e = df_add(q.e, p.e) 233 #define _QSUM(e) s.e = f_add(q.e, p.e) 275 return q_add(q, correction);
291 return dq_add(q, correction);
306 frac _0_5 = {FRAC_0_5_V};
325 the_axis =
f_add(the_axis,
f_mul(norm_err, the_axis));
dquat dq_add(dquat q, dquat p)
Quaternion addition (double precision).
Double precision quaternion.
frac q_xnormerror(quat q)
Pseudo-error of the quaternion norm.
quat q_scale(quat q, frac f)
Scale a quaternion by a fractional, return simple precision quaternion.
frac f_sub(frac a, frac b)
Substract two single precision fractional numbers - may overflow.
frac df_to_f(dfrac x)
Truncate to single precision.
vec3 q_error2(quat setp, quat pos)
This error has a discontinuity at 180 degrees.
#define VEC0
Literal for the Zero vector.
dquat q_scale_dq(quat q, frac f)
Scale a quaternion by a fractional, return double precision quaternion.
quat dq_to_q(dquat q)
Truncate double precision quaternion to single precision.
frac f_idiv(frac a, int16_t b)
Divide single precision by integer, yield single precision.
frac f_neg(frac a)
Negate single precision fractional.
dquat q_mul_s_dq(quat q, quat p, int f)
Scaled Quaternion multiplication, return value is double precision.
dfrac df_sub(dfrac a, dfrac b)
Substract two double precision fractional numbers - may overflow.
vec3 v_imul(vec3 a, int16_t b)
Multiply vector by integer having the same width as frac.
vec3 v_fmul(vec3 a, frac b)
Multiply a single precision vector by a fractional, yield single precision.
dfrac df_idiv(dfrac a, int16_t b)
Divide double precision by integer, yield double precision.
quat q_conj(quat q)
Conjugate quaternion.
dfrac f_mul_df(frac a, frac b)
Multiply single precision, yield double precision.
frac f_add(frac a, frac b)
Add two single precision fractional numbers - may overflow.
quat q_add(quat q, quat p)
Quaternion addition (single precision)
dquat q_mul_dq(quat q, quat p)
Quaternion multiplication, return value is double precision.
16 bit fractional number in Q1.15 format.
dquat dq_xrenorm(dquat q)
Renormalize quaternion.
Single precision quaternion.
vec3 q_error(quat setp, quat pos)
The magnitude of this error reaches its maximum at 90 degrees and goes to zero at 180 degrees.
vec_axis
This type is used to indicate the axis.
dfrac df_add(dfrac a, dfrac b)
Add two double precision fractional numbers - may overflow.
frac f_mul(frac a, frac b)
Multiply single precision, yield single precision.
Single precision 3D vector.
quat q_mul(quat q, quat p)
Quaternion multiplication, return value is simple precision.
quat q_udecompose(quat q, vec_axis axis)
Extract a component from a unit quaternion.
quat q_xrenorm(quat q)
Renormalize quaternion (single precision)
vec3 q_rot(quat q, vec3 v)
Rotate 3D vector by quaternion.