Add doc-tests to isometry.rs.
This commit is contained in:
parent
14ad10a7e0
commit
a512e16868
|
@ -111,6 +111,20 @@ impl<N: Real, D: DimName, R: Rotation<Point<N, D>>> Isometry<N, D, R>
|
||||||
where DefaultAllocator: Allocator<N, D>
|
where DefaultAllocator: Allocator<N, D>
|
||||||
{
|
{
|
||||||
/// Creates a new isometry from its rotational and translational parts.
|
/// Creates a new isometry from its rotational and translational parts.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # #[macro_use] extern crate approx;
|
||||||
|
/// # extern crate nalgebra;
|
||||||
|
/// # use std::f32;
|
||||||
|
/// # use nalgebra::{Isometry3, Translation3, UnitQuaternion, Vector3, Point3};
|
||||||
|
/// let tra = Translation3::new(0.0, 0.0, 3.0);
|
||||||
|
/// let rot = UnitQuaternion::from_scaled_axis(Vector3::y() * f32::consts::PI);
|
||||||
|
/// let iso = Isometry3::from_parts(tra, rot);
|
||||||
|
///
|
||||||
|
/// assert_relative_eq!(iso * Point3::new(1.0, 2.0, 3.0), Point3::new(-1.0, 2.0, 0.0), epsilon = 1.0e-6);
|
||||||
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_parts(translation: Translation<N, D>, rotation: R) -> Isometry<N, D, R> {
|
pub fn from_parts(translation: Translation<N, D>, rotation: R) -> Isometry<N, D, R> {
|
||||||
Isometry {
|
Isometry {
|
||||||
|
@ -121,6 +135,18 @@ where DefaultAllocator: Allocator<N, D>
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Inverts `self`.
|
/// Inverts `self`.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # use std::f32;
|
||||||
|
/// # use nalgebra::{Isometry2, Point2, Vector2};
|
||||||
|
/// let iso = Isometry2::new(Vector2::new(1.0, 2.0), f32::consts::FRAC_PI_2);
|
||||||
|
/// let inv = iso.inverse();
|
||||||
|
/// let pt = Point2::new(1.0, 2.0);
|
||||||
|
///
|
||||||
|
/// assert_eq!(inv * (iso * pt), pt);
|
||||||
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn inverse(&self) -> Isometry<N, D, R> {
|
pub fn inverse(&self) -> Isometry<N, D, R> {
|
||||||
let mut res = self.clone();
|
let mut res = self.clone();
|
||||||
|
@ -128,7 +154,20 @@ where DefaultAllocator: Allocator<N, D>
|
||||||
res
|
res
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Inverts `self`.
|
/// Inverts `self` in-place.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # use std::f32;
|
||||||
|
/// # use nalgebra::{Isometry2, Point2, Vector2};
|
||||||
|
/// let mut iso = Isometry2::new(Vector2::new(1.0, 2.0), f32::consts::FRAC_PI_2);
|
||||||
|
/// let pt = Point2::new(1.0, 2.0);
|
||||||
|
/// let transformed_pt = iso * pt;
|
||||||
|
/// iso.inverse_mut();
|
||||||
|
///
|
||||||
|
/// assert_eq!(iso * transformed_pt, pt);
|
||||||
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn inverse_mut(&mut self) {
|
pub fn inverse_mut(&mut self) {
|
||||||
self.rotation.inverse_mut();
|
self.rotation.inverse_mut();
|
||||||
|
@ -137,12 +176,40 @@ where DefaultAllocator: Allocator<N, D>
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Appends to `self` the given translation in-place.
|
/// Appends to `self` the given translation in-place.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # use std::f32;
|
||||||
|
/// # use nalgebra::{Isometry2, Translation2, Vector2};
|
||||||
|
/// let mut iso = Isometry2::new(Vector2::new(1.0, 2.0), f32::consts::FRAC_PI_2);
|
||||||
|
/// let tra = Translation2::new(3.0, 4.0);
|
||||||
|
/// // Same as `iso = tra * iso`.
|
||||||
|
/// iso.append_translation_mut(&tra);
|
||||||
|
///
|
||||||
|
/// assert_eq!(iso.translation, Translation2::new(4.0, 6.0));
|
||||||
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn append_translation_mut(&mut self, t: &Translation<N, D>) {
|
pub fn append_translation_mut(&mut self, t: &Translation<N, D>) {
|
||||||
self.translation.vector += &t.vector
|
self.translation.vector += &t.vector
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Appends to `self` the given rotation in-place.
|
/// Appends to `self` the given rotation in-place.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # #[macro_use] extern crate approx;
|
||||||
|
/// # extern crate nalgebra;
|
||||||
|
/// # use std::f32;
|
||||||
|
/// # use nalgebra::{Isometry2, Translation2, UnitComplex, Vector2};
|
||||||
|
/// let mut iso = Isometry2::new(Vector2::new(1.0, 2.0), f32::consts::PI / 6.0);
|
||||||
|
/// let rot = UnitComplex::new(f32::consts::PI / 2.0);
|
||||||
|
/// // Same as `iso = rot * iso`.
|
||||||
|
/// iso.append_rotation_mut(&rot);
|
||||||
|
///
|
||||||
|
/// assert_relative_eq!(iso, Isometry2::new(Vector2::new(-2.0, 1.0), f32::consts::PI * 2.0 / 3.0), epsilon = 1.0e-6);
|
||||||
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn append_rotation_mut(&mut self, r: &R) {
|
pub fn append_rotation_mut(&mut self, r: &R) {
|
||||||
self.rotation = self.rotation.append_rotation(&r);
|
self.rotation = self.rotation.append_rotation(&r);
|
||||||
|
@ -151,6 +218,21 @@ where DefaultAllocator: Allocator<N, D>
|
||||||
|
|
||||||
/// Appends in-place to `self` a rotation centered at the point `p`, i.e., the rotation that
|
/// Appends in-place to `self` a rotation centered at the point `p`, i.e., the rotation that
|
||||||
/// lets `p` invariant.
|
/// lets `p` invariant.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # #[macro_use] extern crate approx;
|
||||||
|
/// # extern crate nalgebra;
|
||||||
|
/// # use std::f32;
|
||||||
|
/// # use nalgebra::{Isometry2, Translation2, UnitComplex, Vector2, Point2};
|
||||||
|
/// let mut iso = Isometry2::new(Vector2::new(1.0, 2.0), f32::consts::FRAC_PI_2);
|
||||||
|
/// let rot = UnitComplex::new(f32::consts::FRAC_PI_2);
|
||||||
|
/// let pt = Point2::new(1.0, 0.0);
|
||||||
|
/// iso.append_rotation_wrt_point_mut(&rot, &pt);
|
||||||
|
///
|
||||||
|
/// assert_relative_eq!(iso * pt, Point2::new(-2.0, 0.0), epsilon = 1.0e-6);
|
||||||
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn append_rotation_wrt_point_mut(&mut self, r: &R, p: &Point<N, D>) {
|
pub fn append_rotation_wrt_point_mut(&mut self, r: &R, p: &Point<N, D>) {
|
||||||
self.translation.vector -= &p.coords;
|
self.translation.vector -= &p.coords;
|
||||||
|
@ -160,10 +242,23 @@ where DefaultAllocator: Allocator<N, D>
|
||||||
|
|
||||||
/// Appends in-place to `self` a rotation centered at the point with coordinates
|
/// Appends in-place to `self` a rotation centered at the point with coordinates
|
||||||
/// `self.translation`.
|
/// `self.translation`.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # use std::f32;
|
||||||
|
/// # use nalgebra::{Isometry2, Translation2, UnitComplex, Vector2, Point2};
|
||||||
|
/// let mut iso = Isometry2::new(Vector2::new(1.0, 2.0), f32::consts::FRAC_PI_2);
|
||||||
|
/// let rot = UnitComplex::new(f32::consts::FRAC_PI_2);
|
||||||
|
/// iso.append_rotation_wrt_center_mut(&rot);
|
||||||
|
///
|
||||||
|
/// // The translation part should not have changed.
|
||||||
|
/// assert_eq!(iso.translation.vector, Vector2::new(1.0, 2.0));
|
||||||
|
/// assert_eq!(iso.rotation, UnitComplex::new(f32::consts::PI));
|
||||||
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn append_rotation_wrt_center_mut(&mut self, r: &R) {
|
pub fn append_rotation_wrt_center_mut(&mut self, r: &R) {
|
||||||
let center = Point::from_coordinates(self.translation.vector.clone());
|
self.rotation = self.rotation.append_rotation(r);
|
||||||
self.append_rotation_wrt_point_mut(r, ¢er)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,6 +270,22 @@ impl<N: Real, D: DimName, R> Isometry<N, D, R>
|
||||||
where DefaultAllocator: Allocator<N, D>
|
where DefaultAllocator: Allocator<N, D>
|
||||||
{
|
{
|
||||||
/// Converts this isometry into its equivalent homogeneous transformation matrix.
|
/// Converts this isometry into its equivalent homogeneous transformation matrix.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # #[macro_use] extern crate approx;
|
||||||
|
/// # extern crate nalgebra;
|
||||||
|
/// # use std::f32;
|
||||||
|
/// # use nalgebra::{Isometry2, Vector2, Matrix3};
|
||||||
|
/// let iso = Isometry2::new(Vector2::new(10.0, 20.0), f32::consts::FRAC_PI_6);
|
||||||
|
/// let expected = Matrix3::new(0.8660254, -0.5, 10.0,
|
||||||
|
/// 0.5, 0.8660254, 20.0,
|
||||||
|
/// 0.0, 0.0, 1.0);
|
||||||
|
///
|
||||||
|
/// // The translation part should not have changed.
|
||||||
|
/// assert_relative_eq!(iso.to_homogeneous(), expected, epsilon = 1.0e-6);
|
||||||
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn to_homogeneous(&self) -> MatrixN<N, DimNameSum<D, U1>>
|
pub fn to_homogeneous(&self) -> MatrixN<N, DimNameSum<D, U1>>
|
||||||
where
|
where
|
||||||
|
|
Loading…
Reference in New Issue