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

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

A 2-dimensional rotation matrix.

## Methods

### `impl<N: RealField> 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`[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`[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
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
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)`[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: RealField> From<Unit<Complex<N>>> for Rotation2<N>`[src]

#### `fn from(q: UnitComplex<N>) -> Self`[src]

Performs the conversion.

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

#### `fn to_superset(&self) -> UnitComplex<N2>`[src]

The inclusion map: converts `self` to the equivalent element of its superset.

#### `fn is_in_subset(q: &UnitComplex<N2>) -> bool`[src]

Checks if `element` is actually part of the subset `Self` (and can be converted to it).

#### `unsafe fn from_superset_unchecked(q: &UnitComplex<N2>) -> Self`[src]

Use with care! Same as `self.to_superset` but without any property checks. Always succeeds.

#### `fn from_superset(element: &T) -> Option<Self>`[src]

The inverse inclusion map: attempts to construct `self` from the equivalent element of its superset. Read more

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g., `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g., `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g., `str,u8` or `String,struct:Vec,test`)