Type Alias nalgebra::geometry::UnitComplex
source · pub type UnitComplex<T> = Unit<Complex<T>>;
Expand description
A 2D rotation represented as a complex number with magnitude 1.
All the methods specific UnitComplex
are listed here. You may also
read the documentation of the Complex
type which
is used internally and accessible with unit_complex.complex()
.
§Construction
- Identity
identity
- From a 2D rotation angle
new
,from_cos_sin_unchecked
… - From an existing 2D matrix or complex number
from_matrix
,rotation_to
,powf
… - From two vectors
rotation_between
,scaled_rotation_between_axis
…
§Transformation and composition
- Angle extraction
angle
,angle_to
… - Transformation of a vector or a point
transform_vector
,inverse_transform_point
… - Conjugation and inversion
conjugate
,inverse_mut
… - Interpolation
slerp
…
§Conversion
Aliased Type§
struct UnitComplex<T> { /* private fields */ }
Implementations§
source§impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
§Angle extraction
sourcepub fn angle(&self) -> T
pub fn angle(&self) -> T
The rotation angle in ]-pi; pi]
of this unit complex number.
§Example
let rot = UnitComplex::new(1.78);
assert_eq!(rot.angle(), 1.78);
sourcepub fn sin_angle(&self) -> T
pub fn sin_angle(&self) -> T
The sine of the rotation angle.
§Example
let angle = 1.78f32;
let rot = UnitComplex::new(angle);
assert_eq!(rot.sin_angle(), angle.sin());
sourcepub fn cos_angle(&self) -> T
pub fn cos_angle(&self) -> T
The cosine of the rotation angle.
§Example
let angle = 1.78f32;
let rot = UnitComplex::new(angle);
assert_eq!(rot.cos_angle(),angle.cos());
sourcepub fn scaled_axis(&self) -> Vector1<T>
pub fn scaled_axis(&self) -> Vector1<T>
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.
source§impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
§Conjugation and inversion
sourcepub fn conjugate(&self) -> Self
pub fn conjugate(&self) -> Self
Compute the conjugate of this unit complex number.
§Example
let rot = UnitComplex::new(1.78);
let conj = rot.conjugate();
assert_eq!(rot.complex().im, -conj.complex().im);
assert_eq!(rot.complex().re, conj.complex().re);
sourcepub fn inverse(&self) -> Self
pub fn inverse(&self) -> Self
Inverts this complex number if it is not zero.
§Example
let rot = UnitComplex::new(1.2);
let inv = rot.inverse();
assert_relative_eq!(rot * inv, UnitComplex::identity(), epsilon = 1.0e-6);
assert_relative_eq!(inv * rot, UnitComplex::identity(), epsilon = 1.0e-6);
sourcepub fn conjugate_mut(&mut self)
pub fn conjugate_mut(&mut self)
Compute in-place the conjugate of this unit complex number.
§Example
let angle = 1.7;
let rot = UnitComplex::new(angle);
let mut conj = UnitComplex::new(angle);
conj.conjugate_mut();
assert_eq!(rot.complex().im, -conj.complex().im);
assert_eq!(rot.complex().re, conj.complex().re);
sourcepub fn inverse_mut(&mut self)
pub fn inverse_mut(&mut self)
Inverts in-place this unit complex number.
§Example
let angle = 1.7;
let mut rot = UnitComplex::new(angle);
rot.inverse_mut();
assert_relative_eq!(rot * UnitComplex::new(angle), UnitComplex::identity());
assert_relative_eq!(UnitComplex::new(angle) * rot, UnitComplex::identity());
source§impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
§Conversion to a matrix
sourcepub fn to_rotation_matrix(self) -> Rotation2<T>
pub fn to_rotation_matrix(self) -> Rotation2<T>
Builds the rotation matrix corresponding to this unit complex number.
§Example
let rot = UnitComplex::new(f32::consts::FRAC_PI_6);
let expected = Rotation2::new(f32::consts::FRAC_PI_6);
assert_eq!(rot.to_rotation_matrix(), expected);
sourcepub fn to_homogeneous(self) -> Matrix3<T>
pub fn to_homogeneous(self) -> Matrix3<T>
Converts this unit complex number into its equivalent homogeneous transformation matrix.
§Example
let rot = UnitComplex::new(f32::consts::FRAC_PI_6);
let expected = Matrix3::new(0.8660254, -0.5, 0.0,
0.5, 0.8660254, 0.0,
0.0, 0.0, 1.0);
assert_eq!(rot.to_homogeneous(), expected);
source§impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
§Transformation of a vector or a point
sourcepub fn transform_point(&self, pt: &Point2<T>) -> Point2<T>
pub fn transform_point(&self, pt: &Point2<T>) -> Point2<T>
Rotate the given point by this unit complex number.
This is the same as the multiplication self * pt
.
§Example
let rot = UnitComplex::new(f32::consts::FRAC_PI_2);
let transformed_point = rot.transform_point(&Point2::new(1.0, 2.0));
assert_relative_eq!(transformed_point, Point2::new(-2.0, 1.0), epsilon = 1.0e-6);
sourcepub fn transform_vector(&self, v: &Vector2<T>) -> Vector2<T>
pub fn transform_vector(&self, v: &Vector2<T>) -> Vector2<T>
Rotate the given vector by this unit complex number.
This is the same as the multiplication self * v
.
§Example
let rot = UnitComplex::new(f32::consts::FRAC_PI_2);
let transformed_vector = rot.transform_vector(&Vector2::new(1.0, 2.0));
assert_relative_eq!(transformed_vector, Vector2::new(-2.0, 1.0), epsilon = 1.0e-6);
sourcepub fn inverse_transform_point(&self, pt: &Point2<T>) -> Point2<T>
pub fn inverse_transform_point(&self, pt: &Point2<T>) -> Point2<T>
Rotate the given point by the inverse of this unit complex number.
§Example
let rot = UnitComplex::new(f32::consts::FRAC_PI_2);
let transformed_point = rot.inverse_transform_point(&Point2::new(1.0, 2.0));
assert_relative_eq!(transformed_point, Point2::new(2.0, -1.0), epsilon = 1.0e-6);
sourcepub fn inverse_transform_vector(&self, v: &Vector2<T>) -> Vector2<T>
pub fn inverse_transform_vector(&self, v: &Vector2<T>) -> Vector2<T>
Rotate the given vector by the inverse of this unit complex number.
§Example
let rot = UnitComplex::new(f32::consts::FRAC_PI_2);
let transformed_vector = rot.inverse_transform_vector(&Vector2::new(1.0, 2.0));
assert_relative_eq!(transformed_vector, Vector2::new(2.0, -1.0), epsilon = 1.0e-6);
sourcepub fn inverse_transform_unit_vector(
&self,
v: &Unit<Vector2<T>>
) -> Unit<Vector2<T>>
pub fn inverse_transform_unit_vector( &self, v: &Unit<Vector2<T>> ) -> Unit<Vector2<T>>
Rotate the given vector by the inverse of this unit complex number.
§Example
let rot = UnitComplex::new(f32::consts::FRAC_PI_2);
let transformed_vector = rot.inverse_transform_unit_vector(&Vector2::x_axis());
assert_relative_eq!(transformed_vector, -Vector2::y_axis(), epsilon = 1.0e-6);
source§impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
§Interpolation
sourcepub fn slerp(&self, other: &Self, t: T) -> Self
pub fn slerp(&self, other: &Self, t: T) -> Self
Spherical linear interpolation between two rotations represented as unit complex numbers.
§Examples:
let rot1 = UnitComplex::new(std::f32::consts::FRAC_PI_4);
let rot2 = UnitComplex::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);
source§impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
§Identity
source§impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
§Construction from a 2D rotation angle
sourcepub fn new(angle: T) -> Self
pub fn new(angle: T) -> Self
Builds the unit complex number corresponding to the rotation with the given angle.
§Example
let rot = UnitComplex::new(f32::consts::FRAC_PI_2);
assert_relative_eq!(rot * Point2::new(3.0, 4.0), Point2::new(-4.0, 3.0));
sourcepub fn from_angle(angle: T) -> Self
pub fn from_angle(angle: T) -> Self
Builds the unit complex number corresponding to the rotation with the angle.
Same as Self::new(angle)
.
§Example
let rot = UnitComplex::from_angle(f32::consts::FRAC_PI_2);
assert_relative_eq!(rot * Point2::new(3.0, 4.0), Point2::new(-4.0, 3.0));
sourcepub fn from_cos_sin_unchecked(cos: T, sin: T) -> Self
pub fn from_cos_sin_unchecked(cos: T, sin: T) -> Self
Builds the unit complex number from the sinus and cosinus of the rotation angle.
The input values are not checked to actually be cosines and sine of the same value.
Is is generally preferable to use the ::new(angle)
constructor instead.
§Example
let angle = f32::consts::FRAC_PI_2;
let rot = UnitComplex::from_cos_sin_unchecked(angle.cos(), angle.sin());
assert_relative_eq!(rot * Point2::new(3.0, 4.0), Point2::new(-4.0, 3.0));
source§impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
§Construction from an existing 2D matrix or complex number
sourcepub fn cast<To: Scalar>(self) -> UnitComplex<To>where
UnitComplex<To>: SupersetOf<Self>,
pub fn cast<To: Scalar>(self) -> UnitComplex<To>where
UnitComplex<To>: SupersetOf<Self>,
Cast the components of self
to another type.
§Example
#[macro_use] extern crate approx;
let c = UnitComplex::new(1.0f64);
let c2 = c.cast::<f32>();
assert_relative_eq!(c2, UnitComplex::new(1.0f32));
sourcepub fn complex(&self) -> &Complex<T>
pub fn complex(&self) -> &Complex<T>
The underlying complex number.
Same as self.as_ref()
.
§Example
let angle = 1.78f32;
let rot = UnitComplex::new(angle);
assert_eq!(*rot.complex(), Complex::new(angle.cos(), angle.sin()));
sourcepub fn from_complex(q: Complex<T>) -> Self
pub fn from_complex(q: Complex<T>) -> Self
Creates a new unit complex number from a complex number.
The input complex number will be normalized.
sourcepub fn from_complex_and_get(q: Complex<T>) -> (Self, T)
pub fn from_complex_and_get(q: Complex<T>) -> (Self, T)
Creates a new unit complex number from a complex number.
The input complex number will be normalized. Returns the norm of the complex number as well.
sourcepub fn from_rotation_matrix(rotmat: &Rotation2<T>) -> Self
pub fn from_rotation_matrix(rotmat: &Rotation2<T>) -> Self
Builds the unit complex number from the corresponding 2D rotation matrix.
§Example
let rot = Rotation2::new(1.7);
let complex = UnitComplex::from_rotation_matrix(&rot);
assert_eq!(complex, UnitComplex::new(1.7));
sourcepub fn from_basis_unchecked(basis: &[Vector2<T>; 2]) -> Self
pub fn from_basis_unchecked(basis: &[Vector2<T>; 2]) -> Self
Builds a rotation from a basis assumed to be orthonormal.
In order to get a valid unit-quaternion, the input must be an orthonormal basis, i.e., all vectors are normalized, and the are all orthogonal to each other. These invariants are not checked by this method.
sourcepub fn from_matrix(m: &Matrix2<T>) -> Selfwhere
T: RealField,
pub fn from_matrix(m: &Matrix2<T>) -> Selfwhere
T: RealField,
Builds an unit complex 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.
sourcepub fn from_matrix_eps(
m: &Matrix2<T>,
eps: T,
max_iter: usize,
guess: Self
) -> Selfwhere
T: RealField,
pub fn from_matrix_eps(
m: &Matrix2<T>,
eps: T,
max_iter: usize,
guess: Self
) -> Selfwhere
T: RealField,
Builds an unit complex 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 toUnitQuaternion::identity()
if no other guesses come to mind.
sourcepub fn rotation_to(&self, other: &Self) -> Self
pub fn rotation_to(&self, other: &Self) -> Self
The unit complex number needed to make self
and other
coincide.
The result is such that: self.rotation_to(other) * self == other
.
§Example
let rot1 = UnitComplex::new(0.1);
let rot2 = UnitComplex::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);
sourcepub fn powf(&self, n: T) -> Self
pub fn powf(&self, n: T) -> Self
Raise this unit complex number to a given floating power.
This returns the unit complex number that identifies a rotation angle equal to
self.angle() × n
.
§Example
let rot = UnitComplex::new(0.78);
let pow = rot.powf(2.0);
assert_relative_eq!(pow.angle(), 2.0 * 0.78);
source§impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> UnitComplex<T>where
T::Element: SimdRealField,
§Construction from two vectors
sourcepub fn rotation_between<SB, SC>(
a: &Vector<T, U2, SB>,
b: &Vector<T, U2, SC>
) -> Self
pub fn rotation_between<SB, SC>( a: &Vector<T, U2, SB>, b: &Vector<T, U2, SC> ) -> Self
The unit complex needed to make a
and b
be collinear and point toward the same
direction.
§Example
let a = Vector2::new(1.0, 2.0);
let b = Vector2::new(2.0, 1.0);
let rot = UnitComplex::rotation_between(&a, &b);
assert_relative_eq!(rot * a, b);
assert_relative_eq!(rot.inverse() * b, a);
sourcepub fn scaled_rotation_between<SB, SC>(
a: &Vector<T, U2, SB>,
b: &Vector<T, U2, SC>,
s: T
) -> Self
pub fn scaled_rotation_between<SB, SC>( a: &Vector<T, U2, SB>, b: &Vector<T, U2, SC>, s: T ) -> Self
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 = UnitComplex::scaled_rotation_between(&a, &b, 0.2);
let rot5 = UnitComplex::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);
sourcepub fn rotation_between_axis<SB, SC>(
a: &Unit<Vector<T, U2, SB>>,
b: &Unit<Vector<T, U2, SC>>
) -> Self
pub fn rotation_between_axis<SB, SC>( a: &Unit<Vector<T, U2, SB>>, b: &Unit<Vector<T, U2, SC>> ) -> Self
The unit complex needed to make a
and b
be collinear and point toward the same
direction.
§Example
let a = Unit::new_normalize(Vector2::new(1.0, 2.0));
let b = Unit::new_normalize(Vector2::new(2.0, 1.0));
let rot = UnitComplex::rotation_between_axis(&a, &b);
assert_relative_eq!(rot * a, b);
assert_relative_eq!(rot.inverse() * b, a);
sourcepub fn scaled_rotation_between_axis<SB, SC>(
na: &Unit<Vector<T, U2, SB>>,
nb: &Unit<Vector<T, U2, SC>>,
s: T
) -> Self
pub fn scaled_rotation_between_axis<SB, SC>( na: &Unit<Vector<T, U2, SB>>, nb: &Unit<Vector<T, U2, SC>>, s: T ) -> Self
The smallest rotation needed to make a
and b
collinear and point toward the same
direction, raised to the power s
.
§Example
let a = Unit::new_normalize(Vector2::new(1.0, 2.0));
let b = Unit::new_normalize(Vector2::new(2.0, 1.0));
let rot2 = UnitComplex::scaled_rotation_between_axis(&a, &b, 0.2);
let rot5 = UnitComplex::scaled_rotation_between_axis(&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);
Trait Implementations§
source§impl<T: RealField> AbsDiffEq for UnitComplex<T>
impl<T: RealField> AbsDiffEq for UnitComplex<T>
source§fn default_epsilon() -> Self::Epsilon
fn default_epsilon() -> Self::Epsilon
source§fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool
fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool
source§fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
AbsDiffEq::abs_diff_eq
.source§impl<T: SimdRealField> AbstractRotation<T, 2> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> AbstractRotation<T, 2> for UnitComplex<T>where
T::Element: SimdRealField,
source§fn inverse_mut(&mut self)
fn inverse_mut(&mut self)
self
to its inverse.source§fn transform_vector(&self, v: &SVector<T, 2>) -> SVector<T, 2>
fn transform_vector(&self, v: &SVector<T, 2>) -> SVector<T, 2>
source§fn transform_point(&self, p: &Point<T, 2>) -> Point<T, 2>
fn transform_point(&self, p: &Point<T, 2>) -> Point<T, 2>
source§fn inverse_transform_vector(&self, v: &SVector<T, 2>) -> SVector<T, 2>
fn inverse_transform_vector(&self, v: &SVector<T, 2>) -> SVector<T, 2>
source§fn inverse_transform_point(&self, p: &Point<T, 2>) -> Point<T, 2>
fn inverse_transform_point(&self, p: &Point<T, 2>) -> Point<T, 2>
source§impl<T: SimdRealField> Default for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> Default for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, 'b, T: SimdRealField> Div<&'b Rotation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Div<&'b Rotation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'b, T: SimdRealField> Div<&'b Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Div<&'b Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, 'b, T: SimdRealField> Div<&'b Unit<Complex<T>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Div<&'b Unit<Complex<T>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'b, T: SimdRealField> Div<&'b Unit<Complex<T>>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Div<&'b Unit<Complex<T>>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, T: SimdRealField> Div<Rotation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Div<Rotation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<T: SimdRealField> Div<Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> Div<Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, T: SimdRealField> Div<Unit<Complex<T>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Div<Unit<Complex<T>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<T: SimdRealField> Div for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> Div for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'b, T: SimdRealField> DivAssign<&'b Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> DivAssign<&'b Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: &'b Rotation<T, 2>)
fn div_assign(&mut self, rhs: &'b Rotation<T, 2>)
/=
operation. Read moresource§impl<'b, T: SimdRealField> DivAssign<&'b Unit<Complex<T>>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> DivAssign<&'b Unit<Complex<T>>> for UnitComplex<T>where
T::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: &'b UnitComplex<T>)
fn div_assign(&mut self, rhs: &'b UnitComplex<T>)
/=
operation. Read moresource§impl<T: SimdRealField> DivAssign<Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> DivAssign<Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: Rotation<T, 2>)
fn div_assign(&mut self, rhs: Rotation<T, 2>)
/=
operation. Read moresource§impl<T: SimdRealField> DivAssign for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> DivAssign for UnitComplex<T>where
T::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: UnitComplex<T>)
fn div_assign(&mut self, rhs: UnitComplex<T>)
/=
operation. Read moresource§impl<T: SimdRealField> From<Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> From<Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, 'b, T: SimdRealField> Mul<&'b Isometry<T, Unit<Complex<T>>, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b Isometry<T, Unit<Complex<T>>, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'b, T: SimdRealField> Mul<&'b Isometry<T, Unit<Complex<T>>, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Isometry<T, Unit<Complex<T>>, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, 'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Matrix<T, Const<2>, Const<1>, S>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Matrix<T, Const<2>, Const<1>, S>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Matrix<T, Const<2>, Const<1>, S>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Matrix<T, Const<2>, Const<1>, S>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, 'b, T: SimdRealField> Mul<&'b OPoint<T, Const<2>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b OPoint<T, Const<2>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'b, T: SimdRealField> Mul<&'b OPoint<T, Const<2>>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b OPoint<T, Const<2>>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, 'b, T: SimdRealField> Mul<&'b Rotation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b Rotation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'b, T: SimdRealField> Mul<&'b Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, 'b, T: SimdRealField> Mul<&'b Similarity<T, Unit<Complex<T>>, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b Similarity<T, Unit<Complex<T>>, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
§type Output = Similarity<T, Unit<Complex<T>>, 2>
type Output = Similarity<T, Unit<Complex<T>>, 2>
*
operator.source§fn mul(self, rhs: &'b Similarity<T, UnitComplex<T>, 2>) -> Self::Output
fn mul(self, rhs: &'b Similarity<T, UnitComplex<T>, 2>) -> Self::Output
*
operation. Read moresource§impl<'b, T: SimdRealField> Mul<&'b Similarity<T, Unit<Complex<T>>, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Similarity<T, Unit<Complex<T>>, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
§type Output = Similarity<T, Unit<Complex<T>>, 2>
type Output = Similarity<T, Unit<Complex<T>>, 2>
*
operator.source§fn mul(self, rhs: &'b Similarity<T, UnitComplex<T>, 2>) -> Self::Output
fn mul(self, rhs: &'b Similarity<T, UnitComplex<T>, 2>) -> Self::Output
*
operation. Read moresource§impl<'a, 'b, T, C> Mul<&'b Transform<T, C, 2>> for &'a UnitComplex<T>where
T: Scalar + Zero + One + ClosedAddAssign + ClosedMulAssign + RealField,
C: TCategoryMul<TAffine>,
impl<'a, 'b, T, C> Mul<&'b Transform<T, C, 2>> for &'a UnitComplex<T>where
T: Scalar + Zero + One + ClosedAddAssign + ClosedMulAssign + RealField,
C: TCategoryMul<TAffine>,
source§impl<'b, T, C> Mul<&'b Transform<T, C, 2>> for UnitComplex<T>where
T: Scalar + Zero + One + ClosedAddAssign + ClosedMulAssign + RealField,
C: TCategoryMul<TAffine>,
impl<'b, T, C> Mul<&'b Transform<T, C, 2>> for UnitComplex<T>where
T: Scalar + Zero + One + ClosedAddAssign + ClosedMulAssign + RealField,
C: TCategoryMul<TAffine>,
source§impl<'a, 'b, T: SimdRealField> Mul<&'b Translation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b Translation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'b, T: SimdRealField> Mul<&'b Translation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Translation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, 'b, T: SimdRealField> Mul<&'b Unit<Complex<T>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b Unit<Complex<T>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'b, T: SimdRealField> Mul<&'b Unit<Complex<T>>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Unit<Complex<T>>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, 'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Unit<Matrix<T, Const<2>, Const<1>, S>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Unit<Matrix<T, Const<2>, Const<1>, S>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Unit<Matrix<T, Const<2>, Const<1>, S>>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Unit<Matrix<T, Const<2>, Const<1>, S>>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, T: SimdRealField> Mul<Isometry<T, Unit<Complex<T>>, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<Isometry<T, Unit<Complex<T>>, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<T: SimdRealField> Mul<Isometry<T, Unit<Complex<T>>, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Isometry<T, Unit<Complex<T>>, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, T: SimdRealField, S: Storage<T, Const<2>>> Mul<Matrix<T, Const<2>, Const<1>, S>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, T: SimdRealField, S: Storage<T, Const<2>>> Mul<Matrix<T, Const<2>, Const<1>, S>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<T: SimdRealField, S: Storage<T, Const<2>>> Mul<Matrix<T, Const<2>, Const<1>, S>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField, S: Storage<T, Const<2>>> Mul<Matrix<T, Const<2>, Const<1>, S>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, T: SimdRealField> Mul<OPoint<T, Const<2>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<OPoint<T, Const<2>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<T: SimdRealField> Mul<OPoint<T, Const<2>>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<OPoint<T, Const<2>>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, T: SimdRealField> Mul<Rotation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<Rotation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<T: SimdRealField> Mul<Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, T: SimdRealField> Mul<Similarity<T, Unit<Complex<T>>, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<Similarity<T, Unit<Complex<T>>, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
§type Output = Similarity<T, Unit<Complex<T>>, 2>
type Output = Similarity<T, Unit<Complex<T>>, 2>
*
operator.source§fn mul(self, rhs: Similarity<T, UnitComplex<T>, 2>) -> Self::Output
fn mul(self, rhs: Similarity<T, UnitComplex<T>, 2>) -> Self::Output
*
operation. Read moresource§impl<T: SimdRealField> Mul<Similarity<T, Unit<Complex<T>>, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Similarity<T, Unit<Complex<T>>, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
§type Output = Similarity<T, Unit<Complex<T>>, 2>
type Output = Similarity<T, Unit<Complex<T>>, 2>
*
operator.source§fn mul(self, rhs: Similarity<T, UnitComplex<T>, 2>) -> Self::Output
fn mul(self, rhs: Similarity<T, UnitComplex<T>, 2>) -> Self::Output
*
operation. Read moresource§impl<'a, T, C> Mul<Transform<T, C, 2>> for &'a UnitComplex<T>where
T: Scalar + Zero + One + ClosedAddAssign + ClosedMulAssign + RealField,
C: TCategoryMul<TAffine>,
impl<'a, T, C> Mul<Transform<T, C, 2>> for &'a UnitComplex<T>where
T: Scalar + Zero + One + ClosedAddAssign + ClosedMulAssign + RealField,
C: TCategoryMul<TAffine>,
source§impl<T, C> Mul<Transform<T, C, 2>> for UnitComplex<T>where
T: Scalar + Zero + One + ClosedAddAssign + ClosedMulAssign + RealField,
C: TCategoryMul<TAffine>,
impl<T, C> Mul<Transform<T, C, 2>> for UnitComplex<T>where
T: Scalar + Zero + One + ClosedAddAssign + ClosedMulAssign + RealField,
C: TCategoryMul<TAffine>,
source§impl<'a, T: SimdRealField> Mul<Translation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<Translation<T, 2>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<T: SimdRealField> Mul<Translation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Translation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, T: SimdRealField> Mul<Unit<Complex<T>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<Unit<Complex<T>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<'a, T: SimdRealField, S: Storage<T, Const<2>>> Mul<Unit<Matrix<T, Const<2>, Const<1>, S>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
impl<'a, T: SimdRealField, S: Storage<T, Const<2>>> Mul<Unit<Matrix<T, Const<2>, Const<1>, S>>> for &'a UnitComplex<T>where
T::Element: SimdRealField,
source§impl<T: SimdRealField, S: Storage<T, Const<2>>> Mul<Unit<Matrix<T, Const<2>, Const<1>, S>>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField, S: Storage<T, Const<2>>> Mul<Unit<Matrix<T, Const<2>, Const<1>, S>>> for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<T: SimdRealField> Mul for UnitComplex<T>
impl<T: SimdRealField> Mul for UnitComplex<T>
source§impl<'b, T: SimdRealField> MulAssign<&'b Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> MulAssign<&'b Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: &'b Rotation<T, 2>)
fn mul_assign(&mut self, rhs: &'b Rotation<T, 2>)
*=
operation. Read moresource§impl<'b, T: SimdRealField> MulAssign<&'b Unit<Complex<T>>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> MulAssign<&'b Unit<Complex<T>>> for UnitComplex<T>where
T::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: &'b UnitComplex<T>)
fn mul_assign(&mut self, rhs: &'b UnitComplex<T>)
*=
operation. Read moresource§impl<T: SimdRealField> MulAssign<Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> MulAssign<Rotation<T, 2>> for UnitComplex<T>where
T::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: Rotation<T, 2>)
fn mul_assign(&mut self, rhs: Rotation<T, 2>)
*=
operation. Read moresource§impl<T: SimdRealField> MulAssign for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> MulAssign for UnitComplex<T>where
T::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: UnitComplex<T>)
fn mul_assign(&mut self, rhs: UnitComplex<T>)
*=
operation. Read moresource§impl<T: SimdRealField> One for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> One for UnitComplex<T>where
T::Element: SimdRealField,
source§impl<T: RealField> RelativeEq for UnitComplex<T>
impl<T: RealField> RelativeEq for UnitComplex<T>
source§fn default_max_relative() -> Self::Epsilon
fn default_max_relative() -> Self::Epsilon
source§fn relative_eq(
&self,
other: &Self,
epsilon: Self::Epsilon,
max_relative: Self::Epsilon
) -> bool
fn relative_eq( &self, other: &Self, epsilon: Self::Epsilon, max_relative: Self::Epsilon ) -> bool
source§fn relative_ne(
&self,
other: &Rhs,
epsilon: Self::Epsilon,
max_relative: Self::Epsilon
) -> bool
fn relative_ne( &self, other: &Rhs, epsilon: Self::Epsilon, max_relative: Self::Epsilon ) -> bool
RelativeEq::relative_eq
.source§impl<T: SimdRealField> SimdValue for UnitComplex<T>where
T::Element: SimdRealField,
impl<T: SimdRealField> SimdValue for UnitComplex<T>where
T::Element: SimdRealField,
§type Element = Unit<Complex<<T as SimdValue>::Element>>
type Element = Unit<Complex<<T as SimdValue>::Element>>
§type SimdBool = <T as SimdValue>::SimdBool
type SimdBool = <T as SimdValue>::SimdBool
self
.source§unsafe fn extract_unchecked(&self, i: usize) -> Self::Element
unsafe fn extract_unchecked(&self, i: usize) -> Self::Element
self
without bound-checking. Read moresource§unsafe fn replace_unchecked(&mut self, i: usize, val: Self::Element)
unsafe fn replace_unchecked(&mut self, i: usize, val: Self::Element)
source§impl<T1, T2, R> SubsetOf<Isometry<T2, R, 2>> for UnitComplex<T1>
impl<T1, T2, R> SubsetOf<Isometry<T2, R, 2>> for UnitComplex<T1>
source§fn to_superset(&self) -> Isometry<T2, R, 2>
fn to_superset(&self) -> Isometry<T2, R, 2>
self
to the equivalent element of its superset.source§fn is_in_subset(iso: &Isometry<T2, R, 2>) -> bool
fn is_in_subset(iso: &Isometry<T2, R, 2>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(iso: &Isometry<T2, R, 2>) -> Self
fn from_superset_unchecked(iso: &Isometry<T2, R, 2>) -> Self
self.to_superset
but without any property checks. Always succeeds.source§impl<T1: RealField, T2: RealField + SupersetOf<T1>> SubsetOf<Matrix<T2, Const<3>, Const<3>, ArrayStorage<T2, 3, 3>>> for UnitComplex<T1>
impl<T1: RealField, T2: RealField + SupersetOf<T1>> SubsetOf<Matrix<T2, Const<3>, Const<3>, ArrayStorage<T2, 3, 3>>> for UnitComplex<T1>
source§fn to_superset(&self) -> Matrix3<T2>
fn to_superset(&self) -> Matrix3<T2>
self
to the equivalent element of its superset.source§fn is_in_subset(m: &Matrix3<T2>) -> bool
fn is_in_subset(m: &Matrix3<T2>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(m: &Matrix3<T2>) -> Self
fn from_superset_unchecked(m: &Matrix3<T2>) -> Self
self.to_superset
but without any property checks. Always succeeds.source§impl<T1, T2> SubsetOf<Rotation<T2, 2>> for UnitComplex<T1>
impl<T1, T2> SubsetOf<Rotation<T2, 2>> for UnitComplex<T1>
source§fn to_superset(&self) -> Rotation2<T2>
fn to_superset(&self) -> Rotation2<T2>
self
to the equivalent element of its superset.source§fn is_in_subset(rot: &Rotation2<T2>) -> bool
fn is_in_subset(rot: &Rotation2<T2>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(rot: &Rotation2<T2>) -> Self
fn from_superset_unchecked(rot: &Rotation2<T2>) -> Self
self.to_superset
but without any property checks. Always succeeds.source§impl<T1, T2, R> SubsetOf<Similarity<T2, R, 2>> for UnitComplex<T1>
impl<T1, T2, R> SubsetOf<Similarity<T2, R, 2>> for UnitComplex<T1>
source§fn to_superset(&self) -> Similarity<T2, R, 2>
fn to_superset(&self) -> Similarity<T2, R, 2>
self
to the equivalent element of its superset.source§fn is_in_subset(sim: &Similarity<T2, R, 2>) -> bool
fn is_in_subset(sim: &Similarity<T2, R, 2>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(sim: &Similarity<T2, R, 2>) -> Self
fn from_superset_unchecked(sim: &Similarity<T2, R, 2>) -> Self
self.to_superset
but without any property checks. Always succeeds.source§impl<T1, T2, C> SubsetOf<Transform<T2, C, 2>> for UnitComplex<T1>
impl<T1, T2, C> SubsetOf<Transform<T2, C, 2>> for UnitComplex<T1>
source§fn to_superset(&self) -> Transform<T2, C, 2>
fn to_superset(&self) -> Transform<T2, C, 2>
self
to the equivalent element of its superset.source§fn is_in_subset(t: &Transform<T2, C, 2>) -> bool
fn is_in_subset(t: &Transform<T2, C, 2>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(t: &Transform<T2, C, 2>) -> Self
fn from_superset_unchecked(t: &Transform<T2, C, 2>) -> Self
self.to_superset
but without any property checks. Always succeeds.source§impl<T1, T2> SubsetOf<Unit<Complex<T2>>> for UnitComplex<T1>
impl<T1, T2> SubsetOf<Unit<Complex<T2>>> for UnitComplex<T1>
source§fn to_superset(&self) -> UnitComplex<T2>
fn to_superset(&self) -> UnitComplex<T2>
self
to the equivalent element of its superset.source§fn is_in_subset(uq: &UnitComplex<T2>) -> bool
fn is_in_subset(uq: &UnitComplex<T2>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(uq: &UnitComplex<T2>) -> Self
fn from_superset_unchecked(uq: &UnitComplex<T2>) -> Self
self.to_superset
but without any property checks. Always succeeds.