Type Definition nalgebra::geometry::UnitComplex [−][src]
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
Implementations
The rotation angle in ]-pi; pi]
of this unit complex number.
Example
let rot = UnitComplex::new(1.78);
assert_eq!(rot.angle(), 1.78);
The sine of the rotation angle.
Example
let angle = 1.78f32;
let rot = UnitComplex::new(angle);
assert_eq!(rot.sin_angle(), angle.sin());
The cosine of the rotation angle.
Example
let angle = 1.78f32;
let rot = UnitComplex::new(angle);
assert_eq!(rot.cos_angle(),angle.cos());
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.
The rotation axis and angle in ]0, pi] of this complex number.
This is generally used in the context of generic programming. Using
the .angle()
method instead is more common.
Returns None
if the angle is zero.
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);
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);
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);
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());
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);
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);
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);
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);
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);
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);
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);
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);
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));
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));
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));
Cast the components of self
to another type.
Example
let c = UnitComplex::new(1.0f64);
let c2 = c.cast::<f32>();
assert_eq!(c2, UnitComplex::new(1.0f32));
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()));
Creates a new unit complex number from a complex number.
The input complex number will be normalized.
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.
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));
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.
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.
pub fn from_matrix_eps(
m: &Matrix2<T>,
eps: T,
max_iter: usize,
guess: Self
) -> Self where
T: RealField,
pub fn from_matrix_eps(
m: &Matrix2<T>,
eps: T,
max_iter: usize,
guess: Self
) -> Self where
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.
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);
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);
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);
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);
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);
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
type Epsilon = T
type Epsilon = T
Used for specifying relative comparisons.
The default tolerance to use when testing values that are close together. Read more
A test for equality that uses the absolute difference to compute the approximate equality of two numbers. Read more
The inverse of AbsDiffEq::abs_diff_eq
.
impl<T: SimdRealField> AbstractRotation<T, 2_usize> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> AbstractRotation<T, 2_usize> for UnitComplex<T> where
T::Element: SimdRealField,
Change self
to its inverse.
Apply the rotation to the given vector.
Apply the rotation to the given point.
Apply the inverse rotation to the given vector.
Apply the inverse rotation to the given point.
impl<'b, T: SimdRealField> Div<&'b Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Div<&'b Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Div<&'b Rotation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Div<&'b Rotation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
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,
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,
type Output = UnitComplex<T>
type Output = UnitComplex<T>
The resulting type after applying the /
operator.
Performs the /
operation. Read more
impl<T: SimdRealField> Div<Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Div<Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Div<Rotation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Div<Rotation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Div<Unit<Complex<T>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Div<Unit<Complex<T>>> for UnitComplex<T> where
T::Element: SimdRealField,
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,
type Output = UnitComplex<T>
type Output = UnitComplex<T>
The resulting type after applying the /
operator.
Performs the /
operation. Read more
impl<'b, T: SimdRealField> DivAssign<&'b Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> DivAssign<&'b Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
Performs the /=
operation. Read more
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,
Performs the /=
operation. Read more
impl<T: SimdRealField> DivAssign<Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> DivAssign<Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
Performs the /=
operation. Read more
impl<T: SimdRealField> DivAssign<Unit<Complex<T>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> DivAssign<Unit<Complex<T>>> for UnitComplex<T> where
T::Element: SimdRealField,
Performs the /=
operation. Read more
impl<T: SimdRealField> From<Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> From<Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Isometry<T, Unit<Complex<T>>, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Isometry<T, Unit<Complex<T>>, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
type Output = Isometry<T, UnitComplex<T>, 2>
type Output = Isometry<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
impl<'a, 'b, T: SimdRealField> Mul<&'b Isometry<T, Unit<Complex<T>>, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b Isometry<T, Unit<Complex<T>>, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
type Output = Isometry<T, UnitComplex<T>, 2>
type Output = Isometry<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
impl<'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Matrix<T, Const<2_usize>, Const<1_usize>, S>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Matrix<T, Const<2_usize>, Const<1_usize>, S>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Matrix<T, Const<2_usize>, Const<1_usize>, 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_usize>, Const<1_usize>, S>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b OPoint<T, Const<2_usize>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b OPoint<T, Const<2_usize>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b OPoint<T, Const<2_usize>>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b OPoint<T, Const<2_usize>>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b Rotation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b Rotation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Similarity<T, Unit<Complex<T>>, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Similarity<T, Unit<Complex<T>>, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
type Output = Similarity<T, UnitComplex<T>, 2>
type Output = Similarity<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, T: SimdRealField> Mul<&'b Similarity<T, Unit<Complex<T>>, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b Similarity<T, Unit<Complex<T>>, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
type Output = Similarity<T, UnitComplex<T>, 2>
type Output = Similarity<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'b, T: SimdRealField> Mul<&'b Translation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> Mul<&'b Translation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
type Output = Isometry<T, UnitComplex<T>, 2>
type Output = Isometry<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, 'b, T: SimdRealField> Mul<&'b Translation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField> Mul<&'b Translation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
type Output = Isometry<T, UnitComplex<T>, 2>
type Output = Isometry<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
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,
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,
type Output = UnitComplex<T>
type Output = UnitComplex<T>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Unit<Matrix<T, Const<2_usize>, Const<1_usize>, S>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Unit<Matrix<T, Const<2_usize>, Const<1_usize>, S>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, 'b, T: SimdRealField, S: Storage<T, Const<2>>> Mul<&'b Unit<Matrix<T, Const<2_usize>, Const<1_usize>, 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_usize>, Const<1_usize>, S>>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Isometry<T, Unit<Complex<T>>, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Isometry<T, Unit<Complex<T>>, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
type Output = Isometry<T, UnitComplex<T>, 2>
type Output = Isometry<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
impl<'a, T: SimdRealField> Mul<Isometry<T, Unit<Complex<T>>, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<Isometry<T, Unit<Complex<T>>, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
type Output = Isometry<T, UnitComplex<T>, 2>
type Output = Isometry<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
impl<T: SimdRealField, S: Storage<T, Const<2>>> Mul<Matrix<T, Const<2_usize>, Const<1_usize>, S>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField, S: Storage<T, Const<2>>> Mul<Matrix<T, Const<2_usize>, Const<1_usize>, S>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField, S: Storage<T, Const<2>>> Mul<Matrix<T, Const<2_usize>, Const<1_usize>, S>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField, S: Storage<T, Const<2>>> Mul<Matrix<T, Const<2_usize>, Const<1_usize>, S>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<OPoint<T, Const<2_usize>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<OPoint<T, Const<2_usize>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<OPoint<T, Const<2_usize>>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<OPoint<T, Const<2_usize>>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<Rotation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<Rotation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Similarity<T, Unit<Complex<T>>, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Similarity<T, Unit<Complex<T>>, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
type Output = Similarity<T, UnitComplex<T>, 2>
type Output = Similarity<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, T: SimdRealField> Mul<Similarity<T, Unit<Complex<T>>, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<Similarity<T, Unit<Complex<T>>, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
type Output = Similarity<T, UnitComplex<T>, 2>
type Output = Similarity<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<T: SimdRealField> Mul<Translation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> Mul<Translation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
type Output = Isometry<T, UnitComplex<T>, 2>
type Output = Isometry<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<'a, T: SimdRealField> Mul<Translation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField> Mul<Translation<T, 2_usize>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
type Output = Isometry<T, UnitComplex<T>, 2>
type Output = Isometry<T, UnitComplex<T>, 2>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
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,
type Output = UnitComplex<T>
type Output = UnitComplex<T>
The resulting type after applying the *
operator.
Performs the *
operation. Read more
impl<T: SimdRealField, S: Storage<T, Const<2>>> Mul<Unit<Matrix<T, Const<2_usize>, Const<1_usize>, S>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField, S: Storage<T, Const<2>>> Mul<Unit<Matrix<T, Const<2_usize>, Const<1_usize>, S>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField, S: Storage<T, Const<2>>> Mul<Unit<Matrix<T, Const<2_usize>, Const<1_usize>, S>>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'a, T: SimdRealField, S: Storage<T, Const<2>>> Mul<Unit<Matrix<T, Const<2_usize>, Const<1_usize>, S>>> for &'a UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> MulAssign<&'b Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<'b, T: SimdRealField> MulAssign<&'b Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
Performs the *=
operation. Read more
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,
Performs the *=
operation. Read more
impl<T: SimdRealField> MulAssign<Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> MulAssign<Rotation<T, 2_usize>> for UnitComplex<T> where
T::Element: SimdRealField,
Performs the *=
operation. Read more
impl<T: SimdRealField> MulAssign<Unit<Complex<T>>> for UnitComplex<T> where
T::Element: SimdRealField,
impl<T: SimdRealField> MulAssign<Unit<Complex<T>>> for UnitComplex<T> where
T::Element: SimdRealField,
Performs the *=
operation. Read more
The default relative tolerance for testing values that are far-apart. Read more
A test for equality that uses a relative comparison if the values are far apart.
The inverse of RelativeEq::relative_eq
.
type Element = UnitComplex<T::Element>
type Element = UnitComplex<T::Element>
The type of the elements of each lane of this SIMD value.
Extracts the i-th lane of self
without bound-checking.
Replaces the i-th lane of self
by val
. Read more
Replaces the i-th lane of self
by val
without bound-checking.
Merges self
and other
depending on the lanes of cond
. Read more
Applies a function to each lane of self
. Read more
impl<T1, T2, R> SubsetOf<Isometry<T2, R, 2_usize>> for UnitComplex<T1> where
T1: RealField,
T2: RealField + SupersetOf<T1>,
R: AbstractRotation<T2, 2> + SupersetOf<Self>,
impl<T1, T2, R> SubsetOf<Isometry<T2, R, 2_usize>> for UnitComplex<T1> where
T1: RealField,
T2: RealField + SupersetOf<T1>,
R: AbstractRotation<T2, 2> + SupersetOf<Self>,
The inclusion map: converts self
to the equivalent element of its superset.
Checks if element
is actually part of the subset Self
(and can be converted to it).
Use with care! Same as self.to_superset
but without any property checks. Always succeeds.
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
impl<T1: RealField, T2: RealField + SupersetOf<T1>> SubsetOf<Matrix<T2, Const<{ typenum::$D::USIZE }>, Const<{ typenum::$D::USIZE }>, ArrayStorage<T2, 3_usize, 3_usize>>> for UnitComplex<T1>
impl<T1: RealField, T2: RealField + SupersetOf<T1>> SubsetOf<Matrix<T2, Const<{ typenum::$D::USIZE }>, Const<{ typenum::$D::USIZE }>, ArrayStorage<T2, 3_usize, 3_usize>>> for UnitComplex<T1>
The inclusion map: converts self
to the equivalent element of its superset.
Checks if element
is actually part of the subset Self
(and can be converted to it).
Use with care! Same as self.to_superset
but without any property checks. Always succeeds.
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
impl<T1, T2> SubsetOf<Rotation<T2, 2_usize>> for UnitComplex<T1> where
T1: RealField,
T2: RealField + SupersetOf<T1>,
impl<T1, T2> SubsetOf<Rotation<T2, 2_usize>> for UnitComplex<T1> where
T1: RealField,
T2: RealField + SupersetOf<T1>,
The inclusion map: converts self
to the equivalent element of its superset.
Checks if element
is actually part of the subset Self
(and can be converted to it).
Use with care! Same as self.to_superset
but without any property checks. Always succeeds.
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
impl<T1, T2, R> SubsetOf<Similarity<T2, R, 2_usize>> for UnitComplex<T1> where
T1: RealField,
T2: RealField + SupersetOf<T1>,
R: AbstractRotation<T2, 2> + SupersetOf<Self>,
impl<T1, T2, R> SubsetOf<Similarity<T2, R, 2_usize>> for UnitComplex<T1> where
T1: RealField,
T2: RealField + SupersetOf<T1>,
R: AbstractRotation<T2, 2> + SupersetOf<Self>,
The inclusion map: converts self
to the equivalent element of its superset.
Checks if element
is actually part of the subset Self
(and can be converted to it).
Use with care! Same as self.to_superset
but without any property checks. Always succeeds.
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
impl<T1, T2, C> SubsetOf<Transform<T2, C, 2_usize>> for UnitComplex<T1> where
T1: RealField,
T2: RealField + SupersetOf<T1>,
C: SuperTCategoryOf<TAffine>,
impl<T1, T2, C> SubsetOf<Transform<T2, C, 2_usize>> for UnitComplex<T1> where
T1: RealField,
T2: RealField + SupersetOf<T1>,
C: SuperTCategoryOf<TAffine>,
The inclusion map: converts self
to the equivalent element of its superset.
Checks if element
is actually part of the subset Self
(and can be converted to it).
Use with care! Same as self.to_superset
but without any property checks. Always succeeds.
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
impl<T1, T2> SubsetOf<Unit<Complex<T2>>> for UnitComplex<T1> where
T1: RealField,
T2: RealField + SupersetOf<T1>,
impl<T1, T2> SubsetOf<Unit<Complex<T2>>> for UnitComplex<T1> where
T1: RealField,
T2: RealField + SupersetOf<T1>,
The inclusion map: converts self
to the equivalent element of its superset.
Checks if element
is actually part of the subset Self
(and can be converted to it).
Use with care! Same as self.to_superset
but without any property checks. Always succeeds.
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
The default ULPs to tolerate when testing values that are far-apart. Read more
A test for equality that uses units in the last place (ULP) if the values are far apart.