Type Definition nalgebra::geometry::Rotation2 [−][src]
type Rotation2<N> = Rotation<N, U2>;
A 2-dimensional rotation matrix.
Because this is an alias, not all its methods are listed here. See the Rotation
type too.
Implementations
impl<N: SimdRealField> Rotation2<N>
[src]
impl<N: SimdRealField> Rotation2<N>
[src]pub fn slerp(&self, other: &Self, t: N) -> Self where
N::Element: SimdRealField,
[src]
N::Element: SimdRealField,
Spherical linear interpolation between two rotation matrices.
Examples:
let rot1 = Rotation2::new(std::f32::consts::FRAC_PI_4); let rot2 = Rotation2::new(-std::f32::consts::PI); let rot = rot1.slerp(&rot2, 1.0 / 3.0); assert_relative_eq!(rot.angle(), std::f32::consts::FRAC_PI_2);
impl<N: SimdRealField> Rotation2<N>
[src]
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]
axisangle: Vector<N, U1, SB>
) -> Self
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.
impl<N: SimdRealField> Rotation2<N>
[src]
impl<N: SimdRealField> Rotation2<N>
[src]pub fn from_matrix(m: &Matrix2<N>) -> Self where
N: RealField,
[src]
N: RealField,
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]
m: &Matrix2<N>,
eps: N,
max_iter: usize,
guess: Self
) -> Self where
N: RealField,
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 to0
.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 toRotation2::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]
a: &Vector<N, U2, SB>,
b: &Vector<N, U2, SC>
) -> Self where
N: RealField,
SB: Storage<N, U2>,
SC: Storage<N, U2>,
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]
a: &Vector<N, U2, SB>,
b: &Vector<N, U2, SC>,
s: N
) -> Self where
N: RealField,
SB: Storage<N, U2>,
SC: Storage<N, U2>,
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 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]
N: RealField,
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);
impl<N: SimdRealField> Rotation2<N>
[src]
impl<N: SimdRealField> Rotation2<N>
[src]pub fn angle(&self) -> N
[src]
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 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<N: SimdRealField> From<Unit<Complex<N>>> for Rotation2<N> where
N::Element: SimdRealField,
[src]fn from(q: UnitComplex<N>) -> Self
[src]
impl<N1, N2> SubsetOf<Unit<Complex<N2>>> for Rotation2<N1> where
N1: RealField,
N2: RealField + SupersetOf<N1>,
[src]
impl<N1, N2> SubsetOf<Unit<Complex<N2>>> for Rotation2<N1> where
N1: RealField,
N2: RealField + SupersetOf<N1>,
[src]