Add a dedicated method for computing isometry1.inverse() * isometry2.
It is more efficient that way.
This commit is contained in:
parent
b15a274a14
commit
60708640d3
|
@ -210,6 +210,28 @@ where
|
|||
self.translation.vector = self.rotation.transform_vector(&self.translation.vector);
|
||||
}
|
||||
|
||||
/// Computes `self.inverse() * rhs` in a more efficient way.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// # use std::f32;
|
||||
/// # use nalgebra::{Isometry2, Point2, Vector2};
|
||||
/// let mut iso1 = Isometry2::new(Vector2::new(1.0, 2.0), f32::consts::FRAC_PI_2);
|
||||
/// let mut iso2 = Isometry2::new(Vector2::new(10.0, 20.0), f32::consts::FRAC_PI_4);
|
||||
///
|
||||
/// assert_eq!(iso1.inverse() * iso2, iso1.inv_mul(&iso2));
|
||||
/// ```
|
||||
#[inline]
|
||||
pub fn inv_mul(&self, rhs: &Isometry<N, D, R>) -> Self {
|
||||
let inv_rot1 = self.rotation.inverse();
|
||||
let tr_12 = rhs.translation.vector.clone() - self.translation.vector.clone();
|
||||
Isometry::from_parts(
|
||||
inv_rot1.transform_vector(&tr_12).into(),
|
||||
inv_rot1 * rhs.rotation.clone(),
|
||||
)
|
||||
}
|
||||
|
||||
/// Appends to `self` the given translation in-place.
|
||||
///
|
||||
/// # Example
|
||||
|
|
Loading…
Reference in New Issue