Type Definition nalgebra::geometry::UnitComplex
source · Expand description
A complex number with a norm equal to 1.
Implementations§
source§impl<N: Real> UnitComplex<N>
impl<N: Real> UnitComplex<N>
sourcepub fn angle(&self) -> N
pub fn angle(&self) -> N
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) -> N
pub fn sin_angle(&self) -> N
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) -> N
pub fn cos_angle(&self) -> N
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<N>
pub fn scaled_axis(&self) -> Vector1<N>
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.
sourcepub fn axis_angle(&self) -> Option<(Unit<Vector1<N>>, N)>
pub fn axis_angle(&self) -> Option<(Unit<Vector1<N>>, N)>
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.
sourcepub fn complex(&self) -> &Complex<N>
pub fn complex(&self) -> &Complex<N>
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 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 angle_to(&self, other: &Self) -> N
pub fn angle_to(&self, other: &Self) -> N
The rotation angle needed to make self
and other
coincide.
Example
let rot1 = UnitComplex::new(0.1);
let rot2 = UnitComplex::new(1.7);
assert_relative_eq!(rot1.angle_to(&rot2), 1.6);
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 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());
sourcepub fn powf(&self, n: N) -> Self
pub fn powf(&self, n: N) -> 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_eq!(pow.angle(), 2.0 * 0.78);
sourcepub fn to_rotation_matrix(&self) -> Rotation2<N>
pub fn to_rotation_matrix(&self) -> Rotation2<N>
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<N>
pub fn to_homogeneous(&self) -> Matrix3<N>
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<N: Real> UnitComplex<N>
impl<N: Real> UnitComplex<N>
sourcepub fn identity() -> Self
pub fn identity() -> Self
The unit complex number multiplicative identity.
Example
let rot1 = UnitComplex::identity();
let rot2 = UnitComplex::new(1.7);
assert_eq!(rot1 * rot2, rot2);
assert_eq!(rot2 * rot1, rot2);
sourcepub fn new(angle: N) -> Self
pub fn new(angle: N) -> 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: N) -> Self
pub fn from_angle(angle: N) -> 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: N, sin: N) -> Self
pub fn from_cos_sin_unchecked(cos: N, sin: N) -> 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));
sourcepub fn from_scaled_axis<SB: Storage<N, U1>>(
axisangle: Vector<N, U1, SB>
) -> Self
pub fn from_scaled_axis<SB: Storage<N, U1>>(
axisangle: Vector<N, U1, SB>
) -> Self
Builds a unit complex rotation 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.
sourcepub fn from_complex(q: Complex<N>) -> Self
pub fn from_complex(q: Complex<N>) -> 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<N>) -> (Self, N)
pub fn from_complex_and_get(q: Complex<N>) -> (Self, N)
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<N>) -> Self
pub fn from_rotation_matrix(rotmat: &Rotation2<N>) -> 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 rotation_between<SB, SC>(
a: &Vector<N, U2, SB>,
b: &Vector<N, U2, SC>
) -> Selfwhere
SB: Storage<N, U2>,
SC: Storage<N, U2>,
pub fn rotation_between<SB, SC>(
a: &Vector<N, U2, SB>,
b: &Vector<N, U2, SC>
) -> Selfwhere
SB: Storage<N, U2>,
SC: Storage<N, U2>,
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<N, U2, SB>,
b: &Vector<N, U2, SC>,
s: N
) -> Selfwhere
SB: Storage<N, U2>,
SC: Storage<N, U2>,
pub fn scaled_rotation_between<SB, SC>(
a: &Vector<N, U2, SB>,
b: &Vector<N, U2, SC>,
s: N
) -> Selfwhere
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 = 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<N, U2, SB>>,
b: &Unit<Vector<N, U2, SC>>
) -> Selfwhere
SB: Storage<N, U2>,
SC: Storage<N, U2>,
pub fn rotation_between_axis<SB, SC>(
a: &Unit<Vector<N, U2, SB>>,
b: &Unit<Vector<N, U2, SC>>
) -> Selfwhere
SB: Storage<N, U2>,
SC: Storage<N, U2>,
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<N, U2, SB>>,
nb: &Unit<Vector<N, U2, SC>>,
s: N
) -> Selfwhere
SB: Storage<N, U2>,
SC: Storage<N, U2>,
pub fn scaled_rotation_between_axis<SB, SC>(
na: &Unit<Vector<N, U2, SB>>,
nb: &Unit<Vector<N, U2, SC>>,
s: N
) -> Selfwhere
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 = 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);
source§impl<N: Real> UnitComplex<N>
impl<N: Real> UnitComplex<N>
sourcepub fn rotate<R2: Dim, C2: Dim, S2: StorageMut<N, R2, C2>>(
&self,
rhs: &mut Matrix<N, R2, C2, S2>
)where
ShapeConstraint: DimEq<R2, U2>,
pub fn rotate<R2: Dim, C2: Dim, S2: StorageMut<N, R2, C2>>(
&self,
rhs: &mut Matrix<N, R2, C2, S2>
)where
ShapeConstraint: DimEq<R2, U2>,
Performs the multiplication rhs = self * rhs
in-place.
sourcepub fn rotate_rows<R2: Dim, C2: Dim, S2: StorageMut<N, R2, C2>>(
&self,
lhs: &mut Matrix<N, R2, C2, S2>
)where
ShapeConstraint: DimEq<C2, U2>,
pub fn rotate_rows<R2: Dim, C2: Dim, S2: StorageMut<N, R2, C2>>(
&self,
lhs: &mut Matrix<N, R2, C2, S2>
)where
ShapeConstraint: DimEq<C2, U2>,
Performs the multiplication lhs = lhs * self
in-place.
Trait Implementations§
source§impl<N: Real> AbsDiffEq<Unit<Complex<N>>> for UnitComplex<N>
impl<N: Real> AbsDiffEq<Unit<Complex<N>>> for UnitComplex<N>
source§fn default_epsilon() -> Self::Epsilon
fn default_epsilon() -> Self::Epsilon
source§impl<N: Real> AbstractMagma<Multiplicative> for UnitComplex<N>
impl<N: Real> AbstractMagma<Multiplicative> for UnitComplex<N>
source§impl<N: Real> AbstractMonoid<Multiplicative> for UnitComplex<N>
impl<N: Real> AbstractMonoid<Multiplicative> for UnitComplex<N>
source§fn prop_operating_identity_element_is_noop_approx(args: (Self,)) -> boolwhere
Self: RelativeEq<Self>,
fn prop_operating_identity_element_is_noop_approx(args: (Self,)) -> boolwhere
Self: RelativeEq<Self>,
source§impl<N: Real> AbstractQuasigroup<Multiplicative> for UnitComplex<N>
impl<N: Real> AbstractQuasigroup<Multiplicative> for UnitComplex<N>
source§fn prop_inv_is_latin_square_approx(args: (Self, Self)) -> boolwhere
Self: RelativeEq<Self>,
fn prop_inv_is_latin_square_approx(args: (Self, Self)) -> boolwhere
Self: RelativeEq<Self>,
true
if latin squareness holds for the given arguments. Approximate
equality is used for verifications. Read moresource§impl<N: Real> AbstractSemigroup<Multiplicative> for UnitComplex<N>
impl<N: Real> AbstractSemigroup<Multiplicative> for UnitComplex<N>
source§fn prop_is_associative_approx(args: (Self, Self, Self)) -> boolwhere
Self: RelativeEq<Self>,
fn prop_is_associative_approx(args: (Self, Self, Self)) -> boolwhere
Self: RelativeEq<Self>,
true
if associativity holds for the given arguments. Approximate equality is used
for verifications. Read moresource§impl<N: Real> AffineTransformation<Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2>,
impl<N: Real> AffineTransformation<Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2>,
§type NonUniformScaling = Id<Multiplicative>
type NonUniformScaling = Id<Multiplicative>
§type Translation = Id<Multiplicative>
type Translation = Id<Multiplicative>
source§fn decompose(&self) -> (Id, Self, Id, Self)
fn decompose(&self) -> (Id, Self, Id, Self)
source§fn append_translation(&self, _: &Self::Translation) -> Self
fn append_translation(&self, _: &Self::Translation) -> Self
source§fn prepend_translation(&self, _: &Self::Translation) -> Self
fn prepend_translation(&self, _: &Self::Translation) -> Self
source§fn append_rotation(&self, r: &Self::Rotation) -> Self
fn append_rotation(&self, r: &Self::Rotation) -> Self
source§fn prepend_rotation(&self, r: &Self::Rotation) -> Self
fn prepend_rotation(&self, r: &Self::Rotation) -> Self
source§fn append_scaling(&self, _: &Self::NonUniformScaling) -> Self
fn append_scaling(&self, _: &Self::NonUniformScaling) -> Self
source§fn prepend_scaling(&self, _: &Self::NonUniformScaling) -> Self
fn prepend_scaling(&self, _: &Self::NonUniformScaling) -> Self
source§impl<'a, 'b, N: Real> Div<&'b Rotation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<'a, 'b, N: Real> Div<&'b Rotation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<'b, N: Real> Div<&'b Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<'b, N: Real> Div<&'b Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<'a, 'b, N: Real> Div<&'b Unit<Complex<N>>> for &'a UnitComplex<N>
impl<'a, 'b, N: Real> Div<&'b Unit<Complex<N>>> for &'a UnitComplex<N>
source§fn div(self, rhs: &'b UnitComplex<N>) -> UnitComplex<N>
fn div(self, rhs: &'b UnitComplex<N>) -> UnitComplex<N>
/
operation. Read moresource§impl<'b, N: Real> Div<&'b Unit<Complex<N>>> for UnitComplex<N>
impl<'b, N: Real> Div<&'b Unit<Complex<N>>> for UnitComplex<N>
source§fn div(self, rhs: &'b UnitComplex<N>) -> UnitComplex<N>
fn div(self, rhs: &'b UnitComplex<N>) -> UnitComplex<N>
/
operation. Read moresource§impl<'a, N: Real> Div<Rotation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<'a, N: Real> Div<Rotation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<N: Real> Div<Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<N: Real> Div<Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<'a, N: Real> Div<Unit<Complex<N>>> for &'a UnitComplex<N>
impl<'a, N: Real> Div<Unit<Complex<N>>> for &'a UnitComplex<N>
source§fn div(self, rhs: UnitComplex<N>) -> UnitComplex<N>
fn div(self, rhs: UnitComplex<N>) -> UnitComplex<N>
/
operation. Read moresource§impl<N: Real> Div<Unit<Complex<N>>> for UnitComplex<N>
impl<N: Real> Div<Unit<Complex<N>>> for UnitComplex<N>
source§fn div(self, rhs: UnitComplex<N>) -> UnitComplex<N>
fn div(self, rhs: UnitComplex<N>) -> UnitComplex<N>
/
operation. Read moresource§impl<'b, N: Real> DivAssign<&'b Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<'b, N: Real> DivAssign<&'b Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<'b, N: Real> DivAssign<&'b Unit<Complex<N>>> for UnitComplex<N>
impl<'b, N: Real> DivAssign<&'b Unit<Complex<N>>> for UnitComplex<N>
source§fn div_assign(&mut self, rhs: &'b UnitComplex<N>)
fn div_assign(&mut self, rhs: &'b UnitComplex<N>)
/=
operation. Read moresource§impl<N: Real> DivAssign<Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<N: Real> DivAssign<Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<N: Real> DivAssign<Unit<Complex<N>>> for UnitComplex<N>
impl<N: Real> DivAssign<Unit<Complex<N>>> for UnitComplex<N>
source§fn div_assign(&mut self, rhs: UnitComplex<N>)
fn div_assign(&mut self, rhs: UnitComplex<N>)
/=
operation. Read moresource§impl<N: Real> Identity<Multiplicative> for UnitComplex<N>
impl<N: Real> Identity<Multiplicative> for UnitComplex<N>
source§impl<N: Real> Inverse<Multiplicative> for UnitComplex<N>
impl<N: Real> Inverse<Multiplicative> for UnitComplex<N>
source§impl<'a, 'b, N: Real> Mul<&'b Isometry<N, U2, Unit<Complex<N>>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, 'b, N: Real> Mul<&'b Isometry<N, U2, Unit<Complex<N>>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'b, N: Real> Mul<&'b Isometry<N, U2, Unit<Complex<N>>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'b, N: Real> Mul<&'b Isometry<N, U2, Unit<Complex<N>>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'a, 'b, N: Real, S: Storage<N, U2>> Mul<&'b Matrix<N, U2, U1, S>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, 'b, N: Real, S: Storage<N, U2>> Mul<&'b Matrix<N, U2, U1, S>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'b, N: Real, S: Storage<N, U2>> Mul<&'b Matrix<N, U2, U1, S>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'b, N: Real, S: Storage<N, U2>> Mul<&'b Matrix<N, U2, U1, S>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'a, 'b, N: Real> Mul<&'b Point<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, 'b, N: Real> Mul<&'b Point<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'b, N: Real> Mul<&'b Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'b, N: Real> Mul<&'b Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'a, 'b, N: Real> Mul<&'b Rotation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<'a, 'b, N: Real> Mul<&'b Rotation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<'b, N: Real> Mul<&'b Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<'b, N: Real> Mul<&'b Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<'a, 'b, N: Real> Mul<&'b Similarity<N, U2, Unit<Complex<N>>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, 'b, N: Real> Mul<&'b Similarity<N, U2, Unit<Complex<N>>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§fn mul(self, rhs: &'b Similarity<N, U2, UnitComplex<N>>) -> Self::Output
fn mul(self, rhs: &'b Similarity<N, U2, UnitComplex<N>>) -> Self::Output
*
operation. Read moresource§impl<'b, N: Real> Mul<&'b Similarity<N, U2, Unit<Complex<N>>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'b, N: Real> Mul<&'b Similarity<N, U2, Unit<Complex<N>>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§fn mul(self, rhs: &'b Similarity<N, U2, UnitComplex<N>>) -> Self::Output
fn mul(self, rhs: &'b Similarity<N, U2, UnitComplex<N>>) -> Self::Output
*
operation. Read moresource§impl<'a, 'b, N: Real> Mul<&'b Translation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, 'b, N: Real> Mul<&'b Translation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'b, N: Real> Mul<&'b Translation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'b, N: Real> Mul<&'b Translation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'a, 'b, N: Real> Mul<&'b Unit<Complex<N>>> for &'a UnitComplex<N>
impl<'a, 'b, N: Real> Mul<&'b Unit<Complex<N>>> for &'a UnitComplex<N>
source§fn mul(self, rhs: &'b UnitComplex<N>) -> UnitComplex<N>
fn mul(self, rhs: &'b UnitComplex<N>) -> UnitComplex<N>
*
operation. Read moresource§impl<'b, N: Real> Mul<&'b Unit<Complex<N>>> for UnitComplex<N>
impl<'b, N: Real> Mul<&'b Unit<Complex<N>>> for UnitComplex<N>
source§fn mul(self, rhs: &'b UnitComplex<N>) -> UnitComplex<N>
fn mul(self, rhs: &'b UnitComplex<N>) -> UnitComplex<N>
*
operation. Read moresource§impl<'a, 'b, N: Real, S: Storage<N, U2>> Mul<&'b Unit<Matrix<N, U2, U1, S>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, 'b, N: Real, S: Storage<N, U2>> Mul<&'b Unit<Matrix<N, U2, U1, S>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'b, N: Real, S: Storage<N, U2>> Mul<&'b Unit<Matrix<N, U2, U1, S>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'b, N: Real, S: Storage<N, U2>> Mul<&'b Unit<Matrix<N, U2, U1, S>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'a, N: Real> Mul<Isometry<N, U2, Unit<Complex<N>>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, N: Real> Mul<Isometry<N, U2, Unit<Complex<N>>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<N: Real> Mul<Isometry<N, U2, Unit<Complex<N>>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<N: Real> Mul<Isometry<N, U2, Unit<Complex<N>>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'a, N: Real, S: Storage<N, U2>> Mul<Matrix<N, U2, U1, S>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, N: Real, S: Storage<N, U2>> Mul<Matrix<N, U2, U1, S>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<N: Real, S: Storage<N, U2>> Mul<Matrix<N, U2, U1, S>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<N: Real, S: Storage<N, U2>> Mul<Matrix<N, U2, U1, S>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'a, N: Real> Mul<Point<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, N: Real> Mul<Point<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<N: Real> Mul<Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<N: Real> Mul<Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'a, N: Real> Mul<Rotation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<'a, N: Real> Mul<Rotation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<N: Real> Mul<Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<N: Real> Mul<Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<'a, N: Real> Mul<Similarity<N, U2, Unit<Complex<N>>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, N: Real> Mul<Similarity<N, U2, Unit<Complex<N>>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§fn mul(self, rhs: Similarity<N, U2, UnitComplex<N>>) -> Self::Output
fn mul(self, rhs: Similarity<N, U2, UnitComplex<N>>) -> Self::Output
*
operation. Read moresource§impl<N: Real> Mul<Similarity<N, U2, Unit<Complex<N>>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<N: Real> Mul<Similarity<N, U2, Unit<Complex<N>>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§fn mul(self, rhs: Similarity<N, U2, UnitComplex<N>>) -> Self::Output
fn mul(self, rhs: Similarity<N, U2, UnitComplex<N>>) -> Self::Output
*
operation. Read moresource§impl<'a, N: Real> Mul<Translation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, N: Real> Mul<Translation<N, U2>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<N: Real> Mul<Translation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<N: Real> Mul<Translation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'a, N: Real> Mul<Unit<Complex<N>>> for &'a UnitComplex<N>
impl<'a, N: Real> Mul<Unit<Complex<N>>> for &'a UnitComplex<N>
source§fn mul(self, rhs: UnitComplex<N>) -> UnitComplex<N>
fn mul(self, rhs: UnitComplex<N>) -> UnitComplex<N>
*
operation. Read moresource§impl<N: Real> Mul<Unit<Complex<N>>> for UnitComplex<N>
impl<N: Real> Mul<Unit<Complex<N>>> for UnitComplex<N>
source§fn mul(self, rhs: UnitComplex<N>) -> UnitComplex<N>
fn mul(self, rhs: UnitComplex<N>) -> UnitComplex<N>
*
operation. Read moresource§impl<'a, N: Real, S: Storage<N, U2>> Mul<Unit<Matrix<N, U2, U1, S>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<'a, N: Real, S: Storage<N, U2>> Mul<Unit<Matrix<N, U2, U1, S>>> for &'a UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<N: Real, S: Storage<N, U2>> Mul<Unit<Matrix<N, U2, U1, S>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
impl<N: Real, S: Storage<N, U2>> Mul<Unit<Matrix<N, U2, U1, S>>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U1>,
source§impl<'b, N: Real> MulAssign<&'b Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<'b, N: Real> MulAssign<&'b Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<'b, N: Real> MulAssign<&'b Unit<Complex<N>>> for UnitComplex<N>
impl<'b, N: Real> MulAssign<&'b Unit<Complex<N>>> for UnitComplex<N>
source§fn mul_assign(&mut self, rhs: &'b UnitComplex<N>)
fn mul_assign(&mut self, rhs: &'b UnitComplex<N>)
*=
operation. Read moresource§impl<N: Real> MulAssign<Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
impl<N: Real> MulAssign<Rotation<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2, U2>,
source§impl<N: Real> MulAssign<Unit<Complex<N>>> for UnitComplex<N>
impl<N: Real> MulAssign<Unit<Complex<N>>> for UnitComplex<N>
source§fn mul_assign(&mut self, rhs: UnitComplex<N>)
fn mul_assign(&mut self, rhs: UnitComplex<N>)
*=
operation. Read moresource§impl<N: Real> One for UnitComplex<N>
impl<N: Real> One for UnitComplex<N>
source§impl<N: Real> ProjectiveTransformation<Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2>,
impl<N: Real> ProjectiveTransformation<Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2>,
source§impl<N: Real> RelativeEq<Unit<Complex<N>>> for UnitComplex<N>
impl<N: Real> RelativeEq<Unit<Complex<N>>> for UnitComplex<N>
source§fn default_max_relative() -> Self::Epsilon
fn default_max_relative() -> Self::Epsilon
source§impl<N: Real> Rotation<Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2>,
impl<N: Real> Rotation<Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2>,
source§fn powf(&self, n: N) -> Option<Self>
fn powf(&self, n: N) -> Option<Self>
n
. Read moresource§fn rotation_between(a: &Vector2<N>, b: &Vector2<N>) -> Option<Self>
fn rotation_between(a: &Vector2<N>, b: &Vector2<N>) -> Option<Self>
a
and b
equal to zero, i.e.,
b.angle(a * delta_rotation(a, b)) = 0
. If a
and b
are collinear, the computed
rotation may not be unique. Returns None
if no such simple rotation exists in the
subgroup represented by Self
. Read moresource§impl<N: Real> Similarity<Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2>,
impl<N: Real> Similarity<Point<N, U2>> for UnitComplex<N>where
DefaultAllocator: Allocator<N, U2>,
§type Scaling = Id<Multiplicative>
type Scaling = Id<Multiplicative>
source§fn translation(&self) -> Id
fn translation(&self) -> Id
source§fn translate_point(&self, pt: &E) -> E
fn translate_point(&self, pt: &E) -> E
source§fn rotate_point(&self, pt: &E) -> E
fn rotate_point(&self, pt: &E) -> E
source§fn scale_point(&self, pt: &E) -> E
fn scale_point(&self, pt: &E) -> E
source§fn rotate_vector(
&self,
pt: &<E as EuclideanSpace>::Coordinates
) -> <E as EuclideanSpace>::Coordinates
fn rotate_vector(
&self,
pt: &<E as EuclideanSpace>::Coordinates
) -> <E as EuclideanSpace>::Coordinates
source§fn scale_vector(
&self,
pt: &<E as EuclideanSpace>::Coordinates
) -> <E as EuclideanSpace>::Coordinates
fn scale_vector(
&self,
pt: &<E as EuclideanSpace>::Coordinates
) -> <E as EuclideanSpace>::Coordinates
source§fn inverse_translate_point(&self, pt: &E) -> E
fn inverse_translate_point(&self, pt: &E) -> E
source§fn inverse_rotate_point(&self, pt: &E) -> E
fn inverse_rotate_point(&self, pt: &E) -> E
source§fn inverse_scale_point(&self, pt: &E) -> E
fn inverse_scale_point(&self, pt: &E) -> E
source§fn inverse_rotate_vector(
&self,
pt: &<E as EuclideanSpace>::Coordinates
) -> <E as EuclideanSpace>::Coordinates
fn inverse_rotate_vector(
&self,
pt: &<E as EuclideanSpace>::Coordinates
) -> <E as EuclideanSpace>::Coordinates
source§fn inverse_scale_vector(
&self,
pt: &<E as EuclideanSpace>::Coordinates
) -> <E as EuclideanSpace>::Coordinates
fn inverse_scale_vector(
&self,
pt: &<E as EuclideanSpace>::Coordinates
) -> <E as EuclideanSpace>::Coordinates
source§impl<N1, N2, R> SubsetOf<Isometry<N2, U2, R>> for UnitComplex<N1>where
N1: Real,
N2: Real + SupersetOf<N1>,
R: AlgaRotation<Point2<N2>> + SupersetOf<UnitComplex<N1>>,
impl<N1, N2, R> SubsetOf<Isometry<N2, U2, R>> for UnitComplex<N1>where
N1: Real,
N2: Real + SupersetOf<N1>,
R: AlgaRotation<Point2<N2>> + SupersetOf<UnitComplex<N1>>,
source§fn to_superset(&self) -> Isometry<N2, U2, R>
fn to_superset(&self) -> Isometry<N2, U2, R>
self
to the equivalent element of its superset.source§fn is_in_subset(iso: &Isometry<N2, U2, R>) -> bool
fn is_in_subset(iso: &Isometry<N2, U2, R>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§unsafe fn from_superset_unchecked(iso: &Isometry<N2, U2, R>) -> Self
unsafe fn from_superset_unchecked(iso: &Isometry<N2, U2, R>) -> Self
self.to_superset
but without any property checks. Always succeeds.source§impl<N1: Real, N2: Real + SupersetOf<N1>> SubsetOf<Matrix<N2, U3, U3, <DefaultAllocator as Allocator<N2, U3, U3>>::Buffer>> for UnitComplex<N1>
impl<N1: Real, N2: Real + SupersetOf<N1>> SubsetOf<Matrix<N2, U3, U3, <DefaultAllocator as Allocator<N2, U3, U3>>::Buffer>> for UnitComplex<N1>
source§fn to_superset(&self) -> Matrix3<N2>
fn to_superset(&self) -> Matrix3<N2>
self
to the equivalent element of its superset.source§fn is_in_subset(m: &Matrix3<N2>) -> bool
fn is_in_subset(m: &Matrix3<N2>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§unsafe fn from_superset_unchecked(m: &Matrix3<N2>) -> Self
unsafe fn from_superset_unchecked(m: &Matrix3<N2>) -> Self
self.to_superset
but without any property checks. Always succeeds.source§impl<N1, N2> SubsetOf<Rotation<N2, U2>> for UnitComplex<N1>where
N1: Real,
N2: Real + SupersetOf<N1>,
impl<N1, N2> SubsetOf<Rotation<N2, U2>> for UnitComplex<N1>where
N1: Real,
N2: Real + SupersetOf<N1>,
source§fn to_superset(&self) -> Rotation2<N2>
fn to_superset(&self) -> Rotation2<N2>
self
to the equivalent element of its superset.source§fn is_in_subset(rot: &Rotation2<N2>) -> bool
fn is_in_subset(rot: &Rotation2<N2>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§unsafe fn from_superset_unchecked(rot: &Rotation2<N2>) -> Self
unsafe fn from_superset_unchecked(rot: &Rotation2<N2>) -> Self
self.to_superset
but without any property checks. Always succeeds.source§impl<N1, N2, R> SubsetOf<Similarity<N2, U2, R>> for UnitComplex<N1>where
N1: Real,
N2: Real + SupersetOf<N1>,
R: AlgaRotation<Point2<N2>> + SupersetOf<UnitComplex<N1>>,
impl<N1, N2, R> SubsetOf<Similarity<N2, U2, R>> for UnitComplex<N1>where
N1: Real,
N2: Real + SupersetOf<N1>,
R: AlgaRotation<Point2<N2>> + SupersetOf<UnitComplex<N1>>,
source§fn to_superset(&self) -> Similarity<N2, U2, R>
fn to_superset(&self) -> Similarity<N2, U2, R>
self
to the equivalent element of its superset.source§fn is_in_subset(sim: &Similarity<N2, U2, R>) -> bool
fn is_in_subset(sim: &Similarity<N2, U2, R>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§unsafe fn from_superset_unchecked(sim: &Similarity<N2, U2, R>) -> Self
unsafe fn from_superset_unchecked(sim: &Similarity<N2, U2, R>) -> Self
self.to_superset
but without any property checks. Always succeeds.source§impl<N1, N2, C> SubsetOf<Transform<N2, U2, C>> for UnitComplex<N1>where
N1: Real,
N2: Real + SupersetOf<N1>,
C: SuperTCategoryOf<TAffine>,
impl<N1, N2, C> SubsetOf<Transform<N2, U2, C>> for UnitComplex<N1>where
N1: Real,
N2: Real + SupersetOf<N1>,
C: SuperTCategoryOf<TAffine>,
source§fn to_superset(&self) -> Transform<N2, U2, C>
fn to_superset(&self) -> Transform<N2, U2, C>
self
to the equivalent element of its superset.source§fn is_in_subset(t: &Transform<N2, U2, C>) -> bool
fn is_in_subset(t: &Transform<N2, U2, C>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§unsafe fn from_superset_unchecked(t: &Transform<N2, U2, C>) -> Self
unsafe fn from_superset_unchecked(t: &Transform<N2, U2, C>) -> Self
self.to_superset
but without any property checks. Always succeeds.source§impl<N1, N2> SubsetOf<Unit<Complex<N2>>> for UnitComplex<N1>where
N1: Real,
N2: Real + SupersetOf<N1>,
impl<N1, N2> SubsetOf<Unit<Complex<N2>>> for UnitComplex<N1>where
N1: Real,
N2: Real + SupersetOf<N1>,
source§fn to_superset(&self) -> UnitComplex<N2>
fn to_superset(&self) -> UnitComplex<N2>
self
to the equivalent element of its superset.source§fn is_in_subset(uq: &UnitComplex<N2>) -> bool
fn is_in_subset(uq: &UnitComplex<N2>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§unsafe fn from_superset_unchecked(uq: &UnitComplex<N2>) -> Self
unsafe fn from_superset_unchecked(uq: &UnitComplex<N2>) -> Self
self.to_superset
but without any property checks. Always succeeds.