20template <
typename coordT>
27template <
typename coordT>
29norm(
const Quaternion<coordT>& q)
34template <
typename coordT>
36Quaternion<coordT>::dot_product(
const Quaternion<coordT>& q1,
const Quaternion<coordT>& q2)
38 return ((q1[1] * q2[1]) + (q1[2] * q2[2]) + (q1[3] * q2[3]) + (q1[4] * q2[4]));
41template <
typename coordT>
43Quaternion<coordT>::operator*=(
const Quaternion<coordT>& q)
45 const Quaternion<coordT> tmp(*
this);
46 (*this)[1] = tmp[1] * q[1] - tmp[2] * q[2] - tmp[3] * q[3] - tmp[4] * q[4];
47 (*this)[2] = tmp[1] * q[2] + tmp[2] * q[1] + tmp[3] * q[4] - tmp[4] * q[3];
48 (*this)[3] = tmp[1] * q[3] + tmp[3] * q[1] + tmp[4] * q[2] - tmp[2] * q[4];
49 (*this)[4] = tmp[1] * q[4] + tmp[4] * q[1] + tmp[2] * q[3] - tmp[3] * q[2];
54template <
typename coordT>
56Quaternion<coordT>::operator*=(
const coordT& a)
58 for (
int i = 1; i <= 4; i++)
63template <
typename coordT>
65Quaternion<coordT>::operator*(
const Quaternion& q)
const
67 Quaternion<coordT> tmp(*
this);
73template <
typename coordT>
75Quaternion<coordT>::operator*(
const coordT& a)
const
77 Quaternion<coordT> tmp(*
this);
82template <
typename coordT>
84Quaternion<coordT>::operator/=(
const coordT& a)
86 for (
int i = 1; i <= 4; i++)
90template <
typename coordT>
92Quaternion<coordT>::operator/=(
const Quaternion& q)
94 const Quaternion<coordT> con_q(q[1], -q[2], -q[3], -q[4]);
102template <
typename coordT>
104Quaternion<coordT>::operator/(
const Quaternion& q)
const
106 Quaternion<coordT> tmp(*
this);
111template <
typename coordT>
113Quaternion<coordT>::operator/(
const coordT& a)
const
115 Quaternion<coordT> tmp(*
this);
120template <
typename coordT>
122Quaternion<coordT>::neg_quaternion()
124 (*this)[1] = -(*this)[1];
125 (*this)[2] = -(*this)[2];
126 (*this)[3] = -(*this)[3];
127 (*this)[4] = -(*this)[4];
130template <
typename coordT>
132Quaternion<coordT>::conjugate()
135 (*this)[2] = -(*this)[2];
136 (*this)[3] = -(*this)[3];
137 (*this)[4] = -(*this)[4];
140template <
typename coordT>
142Quaternion<coordT>::normalise()
144 const coordT n =
norm(*
this);
151template <
typename coordT>
153Quaternion<coordT>::inverse()
156 (*this)[1] = (*this)[1] / dp;
157 (*this)[2] = -(*this)[2] / dp;
158 (*this)[3] = -(*this)[3] / dp;
159 (*this)[4] = -(*this)[4] / dp;
162template <
typename coordT>
164conjugate(
const Quaternion<coordT>& q)
166 Quaternion<coordT> tmp = q;
171template <
typename coordT>
173inverse(
const Quaternion<coordT>& q)
175 Quaternion<coordT> tmp = q;
double norm(const BasicCoordinate< num_dimensions, coordT > &p1)
compute sqrt(inner_product(p1,p1))
Definition BasicCoordinate.inl:426
double norm_squared(const BasicCoordinate< num_dimensions, coordT > &p1)
compute (inner_product(p1,p1))
Definition BasicCoordinate.inl:415
NUMBER square(const NUMBER &x)
returns the square of a number, templated.
Definition common.h:154