Add approximate rotation composition for unit-quaternion.

This commit is contained in:
Crozet Sébastien 2021-02-22 14:27:08 +01:00
parent 9d930eb21a
commit 478921881f
1 changed files with 11 additions and 0 deletions

View File

@ -1542,6 +1542,17 @@ where
pub fn inverse_transform_unit_vector(&self, v: &Unit<Vector3<N>>) -> Unit<Vector3<N>> { pub fn inverse_transform_unit_vector(&self, v: &Unit<Vector3<N>>) -> Unit<Vector3<N>> {
self.inverse() * v self.inverse() * v
} }
/// Appends to `self` a rotation given in the axis-angle form, using a linearized formulation.
///
/// This is faster, but approximate, way to compute `UnitQuaternion::new(axisangle) * self`.
#[inline]
pub fn append_axisangle_linearized(&self, axisangle: &Vector3<N>) -> Self {
let half: N = crate::convert(0.5);
let q1 = self.into_inner();
let q2 = Quaternion::from_imag(axisangle * half);
Unit::new_normalize(q1 + q2 * q1)
}
} }
impl<N: RealField> Default for UnitQuaternion<N> { impl<N: RealField> Default for UnitQuaternion<N> {