23 #ifndef FREECAD_BASE_DUAL_QUATERNION_H
24 #define FREECAD_BASE_DUAL_QUATERNION_H
41 class LX_BASE_EXPORT DualQuat {
50 DualQuat(DualNumber x, DualNumber y, DualNumber z, DualNumber w)
51 : x(x), y(y), z(z), w(w) {}
52 DualQuat(
double x,
double y,
double z,
double w,
double dx,
double dy,
double dz,
double dw)
53 : x(x, dx), y(y, dy), z(z, dz), w(w, dw) {}
54 DualQuat(
double x,
double y,
double z,
double w)
55 : x(x), y(y), z(z), w(w) {}
58 DualQuat(DualQuat re, DualQuat du);
67 DualQuat dual()
const {
return DualQuat(x.du, y.du, z.du, w.du);}
70 DualQuat conj()
const {
return DualQuat(-x, -y, -z, w);}
73 DualQuat vec()
const {
return DualQuat(x,y,z,0.0);}
76 double length()
const {
return sqrt(x.re*x.re + y.re*y.re + z.re*z.re + w.re*w.re);}
79 double theta()
const {
return 2.0 * atan2(vec().length(), w.re);}
82 static double dot(DualQuat a, DualQuat b);