[][src]Type Definition nalgebra::geometry::Rotation2

type Rotation2<N> = Rotation<N, U2>;

A 2-dimensional rotation matrix.

Methods

impl<N: SimdRealField> Rotation2<N>[src]

pub fn new(angle: N) -> Self[src]

Builds a 2 dimensional rotation matrix from an angle in radian.

Example

let rot = Rotation2::new(f32::consts::FRAC_PI_2);

assert_relative_eq!(rot * Point2::new(3.0, 4.0), Point2::new(-4.0, 3.0));

pub fn from_scaled_axis<SB: Storage<N, U1>>(
    axisangle: Vector<N, U1, SB>
) -> Self
[src]

Builds a 2 dimensional rotation matrix from an angle in radian wrapped in a 1-dimensional vector.

This is generally used in the context of generic programming. Using the ::new(angle) method instead is more common.

pub fn from_matrix(m: &Matrix2<N>) -> Self where
    N: RealField
[src]

Builds a rotation matrix by extracting the rotation part of the given transformation m.

This is an iterative method. See .from_matrix_eps to provide mover convergence parameters and starting solution. This implements "A Robust Method to Extract the Rotational Part of Deformations" by Müller et al.

pub fn from_matrix_eps(
    m: &Matrix2<N>,
    eps: N,
    max_iter: usize,
    guess: Self
) -> Self where
    N: RealField
[src]

Builds a rotation matrix by extracting the rotation part of the given transformation m.

This implements "A Robust Method to Extract the Rotational Part of Deformations" by Müller et al.

Parameters

  • m: the matrix from which the rotational part is to be extracted.
  • eps: the angular errors tolerated between the current rotation and the optimal one.
  • max_iter: the maximum number of iterations. Loops indefinitely until convergence if set to 0.
  • guess: an estimate of the solution. Convergence will be significantly faster if an initial solution close to the actual solution is provided. Can be set to Rotation2::identity() if no other guesses come to mind.

pub fn rotation_between<SB, SC>(
    a: &Vector<N, U2, SB>,
    b: &Vector<N, U2, SC>
) -> Self where
    N: RealField,
    SB: Storage<N, U2>,
    SC: Storage<N, U2>, 
[src]

The rotation matrix required to align a and b but with its angle.

This is the rotation R such that (R * a).angle(b) == 0 && (R * a).dot(b).is_positive().

Example

let a = Vector2::new(1.0, 2.0);
let b = Vector2::new(2.0, 1.0);
let rot = Rotation2::rotation_between(&a, &b);
assert_relative_eq!(rot * a, b);
assert_relative_eq!(rot.inverse() * b, a);

pub fn scaled_rotation_between<SB, SC>(
    a: &Vector<N, U2, SB>,
    b: &Vector<N, U2, SC>,
    s: N
) -> Self where
    N: RealField,
    SB: Storage<N, U2>,
    SC: Storage<N, U2>, 
[src]

The smallest rotation needed to make a and b collinear and point toward the same direction, raised to the power s.

Example

let a = Vector2::new(1.0, 2.0);
let b = Vector2::new(2.0, 1.0);
let rot2 = Rotation2::scaled_rotation_between(&a, &b, 0.2);
let rot5 = Rotation2::scaled_rotation_between(&a, &b, 0.5);
assert_relative_eq!(rot2 * rot2 * rot2 * rot2 * rot2 * a, b, epsilon = 1.0e-6);
assert_relative_eq!(rot5 * rot5 * a, b, epsilon = 1.0e-6);

pub fn angle(&self) -> N[src]

The rotation angle.

Example

let rot = Rotation2::new(1.78);
assert_relative_eq!(rot.angle(), 1.78);

pub fn angle_to(&self, other: &Self) -> N[src]

The rotation angle needed to make self and other coincide.

Example

let rot1 = Rotation2::new(0.1);
let rot2 = Rotation2::new(1.7);
assert_relative_eq!(rot1.angle_to(&rot2), 1.6);

pub fn rotation_to(&self, other: &Self) -> Self[src]

The rotation matrix needed to make self and other coincide.

The result is such that: self.rotation_to(other) * self == other.

Example

let rot1 = Rotation2::new(0.1);
let rot2 = Rotation2::new(1.7);
let rot_to = rot1.rotation_to(&rot2);

assert_relative_eq!(rot_to * rot1, rot2);
assert_relative_eq!(rot_to.inverse() * rot2, rot1);

pub fn renormalize(&mut self) where
    N: RealField
[src]

Ensure this rotation is an orthonormal rotation matrix. This is useful when repeated computations might cause the matrix from progressively not being orthonormal anymore.

pub fn powf(&self, n: N) -> Self[src]

Raise the quaternion to a given floating power, i.e., returns the rotation with the angle of self multiplied by n.

Example

let rot = Rotation2::new(0.78);
let pow = rot.powf(2.0);
assert_relative_eq!(pow.angle(), 2.0 * 0.78);

pub fn scaled_axis(&self) -> VectorN<N, U1>[src]

The rotation angle returned as a 1-dimensional vector.

This is generally used in the context of generic programming. Using the .angle() method instead is more common.

Trait Implementations

impl<N: SimdRealField> From<Unit<Complex<N>>> for Rotation2<N> where
    N::Element: SimdRealField
[src]

impl<N1, N2> SubsetOf<Unit<Complex<N2>>> for Rotation2<N1> where
    N1: RealField,
    N2: RealField + SupersetOf<N1>, 
[src]