Type Alias oxygengine_physics_2d::prelude::nalgebra::geometry::UnitDualQuaternion
source · pub type UnitDualQuaternion<T> = Unit<DualQuaternion<T>>;
Expand description
A unit quaternions. May be used to represent a rotation followed by a translation.
Aliased Type§
struct UnitDualQuaternion<T> { /* private fields */ }
Implementations§
source§impl<T> Unit<T>where
T: Normed,
impl<T> Unit<T>where T: Normed,
sourcepub fn new_normalize(value: T) -> Unit<T>
pub fn new_normalize(value: T) -> Unit<T>
Normalize the given vector and return it wrapped on a Unit
structure.
sourcepub fn try_new(value: T, min_norm: <T as Normed>::Norm) -> Option<Unit<T>>where
<T as Normed>::Norm: RealField,
pub fn try_new(value: T, min_norm: <T as Normed>::Norm) -> Option<Unit<T>>where <T as Normed>::Norm: RealField,
Attempts to normalize the given vector and return it wrapped on a Unit
structure.
Returns None
if the norm was smaller or equal to min_norm
.
sourcepub fn new_and_get(value: T) -> (Unit<T>, <T as Normed>::Norm)
pub fn new_and_get(value: T) -> (Unit<T>, <T as Normed>::Norm)
Normalize the given vector and return it wrapped on a Unit
structure and its norm.
sourcepub fn try_new_and_get(
value: T,
min_norm: <T as Normed>::Norm
) -> Option<(Unit<T>, <T as Normed>::Norm)>where
<T as Normed>::Norm: RealField,
pub fn try_new_and_get( value: T, min_norm: <T as Normed>::Norm ) -> Option<(Unit<T>, <T as Normed>::Norm)>where <T as Normed>::Norm: RealField,
Normalize the given vector and return it wrapped on a Unit
structure and its norm.
Returns None
if the norm was smaller or equal to min_norm
.
sourcepub fn renormalize(&mut self) -> <T as Normed>::Norm
pub fn renormalize(&mut self) -> <T as Normed>::Norm
Normalizes this vector again. This is useful when repeated computations might cause a drift in the norm because of float inaccuracies.
Returns the norm before re-normalization. See .renormalize_fast
for a faster alternative
that may be slightly less accurate if self
drifted significantly from having a unit length.
sourcepub fn renormalize_fast(&mut self)
pub fn renormalize_fast(&mut self)
Normalizes this vector again using a first-order Taylor approximation. This is useful when repeated computations might cause a drift in the norm because of float inaccuracies.
source§impl<T> Unit<T>
impl<T> Unit<T>
sourcepub const fn new_unchecked(value: T) -> Unit<T>
pub const fn new_unchecked(value: T) -> Unit<T>
Wraps the given value, assuming it is already normalized.
sourcepub fn from_ref_unchecked(value: &T) -> &Unit<T>
pub fn from_ref_unchecked(value: &T) -> &Unit<T>
Wraps the given reference, assuming it is already normalized.
sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Retrieves the underlying value.
sourcepub fn unwrap(self) -> T
👎Deprecated: use .into_inner()
instead
pub fn unwrap(self) -> T
.into_inner()
insteadRetrieves the underlying value.
Deprecated: use Unit::into_inner
instead.
sourcepub fn as_mut_unchecked(&mut self) -> &mut T
pub fn as_mut_unchecked(&mut self) -> &mut T
Returns a mutable reference to the underlying value. This is _unchecked
because modifying
the underlying value in such a way that it no longer has unit length may lead to unexpected
results.
source§impl<T> Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
sourcepub fn dual_quaternion(&self) -> &DualQuaternion<T>
pub fn dual_quaternion(&self) -> &DualQuaternion<T>
The underlying dual quaternion.
Same as self.as_ref()
.
Example
let id = UnitDualQuaternion::identity();
assert_eq!(*id.dual_quaternion(), DualQuaternion::from_real_and_dual(
Quaternion::new(1.0, 0.0, 0.0, 0.0),
Quaternion::new(0.0, 0.0, 0.0, 0.0)
));
sourcepub fn conjugate(&self) -> Unit<DualQuaternion<T>>
pub fn conjugate(&self) -> Unit<DualQuaternion<T>>
Compute the conjugate of this unit quaternion.
Example
let qr = Quaternion::new(1.0, 2.0, 3.0, 4.0);
let qd = Quaternion::new(5.0, 6.0, 7.0, 8.0);
let unit = UnitDualQuaternion::new_normalize(
DualQuaternion::from_real_and_dual(qr, qd)
);
let conj = unit.conjugate();
assert_eq!(conj.real, unit.real.conjugate());
assert_eq!(conj.dual, unit.dual.conjugate());
sourcepub fn conjugate_mut(&mut self)
pub fn conjugate_mut(&mut self)
Compute the conjugate of this unit quaternion in-place.
Example
let qr = Quaternion::new(1.0, 2.0, 3.0, 4.0);
let qd = Quaternion::new(5.0, 6.0, 7.0, 8.0);
let unit = UnitDualQuaternion::new_normalize(
DualQuaternion::from_real_and_dual(qr, qd)
);
let mut conj = unit.clone();
conj.conjugate_mut();
assert_eq!(conj.as_ref().real, unit.as_ref().real.conjugate());
assert_eq!(conj.as_ref().dual, unit.as_ref().dual.conjugate());
sourcepub fn inverse(&self) -> Unit<DualQuaternion<T>>
pub fn inverse(&self) -> Unit<DualQuaternion<T>>
Inverts this dual quaternion if it is not zero.
Example
let qr = Quaternion::new(1.0, 2.0, 3.0, 4.0);
let qd = Quaternion::new(5.0, 6.0, 7.0, 8.0);
let unit = UnitDualQuaternion::new_normalize(DualQuaternion::from_real_and_dual(qr, qd));
let inv = unit.inverse();
assert_relative_eq!(unit * inv, UnitDualQuaternion::identity(), epsilon = 1.0e-6);
assert_relative_eq!(inv * unit, UnitDualQuaternion::identity(), epsilon = 1.0e-6);
sourcepub fn inverse_mut(&mut self)
pub fn inverse_mut(&mut self)
Inverts this dual quaternion in place if it is not zero.
Example
let qr = Quaternion::new(1.0, 2.0, 3.0, 4.0);
let qd = Quaternion::new(5.0, 6.0, 7.0, 8.0);
let unit = UnitDualQuaternion::new_normalize(DualQuaternion::from_real_and_dual(qr, qd));
let mut inv = unit.clone();
inv.inverse_mut();
assert_relative_eq!(unit * inv, UnitDualQuaternion::identity(), epsilon = 1.0e-6);
assert_relative_eq!(inv * unit, UnitDualQuaternion::identity(), epsilon = 1.0e-6);
sourcepub fn isometry_to(
&self,
other: &Unit<DualQuaternion<T>>
) -> Unit<DualQuaternion<T>>
pub fn isometry_to( &self, other: &Unit<DualQuaternion<T>> ) -> Unit<DualQuaternion<T>>
The unit dual quaternion needed to make self
and other
coincide.
The result is such that: self.isometry_to(other) * self == other
.
Example
let qr = Quaternion::new(1.0, 2.0, 3.0, 4.0);
let qd = Quaternion::new(5.0, 6.0, 7.0, 8.0);
let dq1 = UnitDualQuaternion::new_normalize(DualQuaternion::from_real_and_dual(qr, qd));
let dq2 = UnitDualQuaternion::new_normalize(DualQuaternion::from_real_and_dual(qd, qr));
let dq_to = dq1.isometry_to(&dq2);
assert_relative_eq!(dq_to * dq1, dq2, epsilon = 1.0e-6);
sourcepub fn lerp(&self, other: &Unit<DualQuaternion<T>>, t: T) -> DualQuaternion<T>
pub fn lerp(&self, other: &Unit<DualQuaternion<T>>, t: T) -> DualQuaternion<T>
Linear interpolation between two unit dual quaternions.
The result is not normalized.
Example
let dq1 = UnitDualQuaternion::new_normalize(DualQuaternion::from_real_and_dual(
Quaternion::new(0.5, 0.0, 0.5, 0.0),
Quaternion::new(0.0, 0.5, 0.0, 0.5)
));
let dq2 = UnitDualQuaternion::new_normalize(DualQuaternion::from_real_and_dual(
Quaternion::new(0.5, 0.0, 0.0, 0.5),
Quaternion::new(0.5, 0.0, 0.5, 0.0)
));
assert_relative_eq!(
UnitDualQuaternion::new_normalize(dq1.lerp(&dq2, 0.5)),
UnitDualQuaternion::new_normalize(
DualQuaternion::from_real_and_dual(
Quaternion::new(0.5, 0.0, 0.25, 0.25),
Quaternion::new(0.25, 0.25, 0.25, 0.25)
)
),
epsilon = 1.0e-6
);
sourcepub fn nlerp(
&self,
other: &Unit<DualQuaternion<T>>,
t: T
) -> Unit<DualQuaternion<T>>
pub fn nlerp( &self, other: &Unit<DualQuaternion<T>>, t: T ) -> Unit<DualQuaternion<T>>
Normalized linear interpolation between two unit quaternions.
This is the same as self.lerp
except that the result is normalized.
Example
let dq1 = UnitDualQuaternion::new_normalize(DualQuaternion::from_real_and_dual(
Quaternion::new(0.5, 0.0, 0.5, 0.0),
Quaternion::new(0.0, 0.5, 0.0, 0.5)
));
let dq2 = UnitDualQuaternion::new_normalize(DualQuaternion::from_real_and_dual(
Quaternion::new(0.5, 0.0, 0.0, 0.5),
Quaternion::new(0.5, 0.0, 0.5, 0.0)
));
assert_relative_eq!(dq1.nlerp(&dq2, 0.2), UnitDualQuaternion::new_normalize(
DualQuaternion::from_real_and_dual(
Quaternion::new(0.5, 0.0, 0.4, 0.1),
Quaternion::new(0.1, 0.4, 0.1, 0.4)
)
), epsilon = 1.0e-6);
sourcepub fn sclerp(
&self,
other: &Unit<DualQuaternion<T>>,
t: T
) -> Unit<DualQuaternion<T>>where
T: RealField,
pub fn sclerp( &self, other: &Unit<DualQuaternion<T>>, t: T ) -> Unit<DualQuaternion<T>>where T: RealField,
Screw linear interpolation between two unit quaternions. This creates a smooth arc from one dual-quaternion to another.
Panics if the angle between both quaternion is 180 degrees (in which case the interpolation
is not well-defined). Use .try_sclerp
instead to avoid the panic.
Example
let dq1 = UnitDualQuaternion::from_parts(
Vector3::new(0.0, 3.0, 0.0).into(),
UnitQuaternion::from_euler_angles(std::f32::consts::FRAC_PI_4, 0.0, 0.0),
);
let dq2 = UnitDualQuaternion::from_parts(
Vector3::new(0.0, 0.0, 3.0).into(),
UnitQuaternion::from_euler_angles(-std::f32::consts::PI, 0.0, 0.0),
);
let dq = dq1.sclerp(&dq2, 1.0 / 3.0);
assert_relative_eq!(
dq.rotation().euler_angles().0, std::f32::consts::FRAC_PI_2, epsilon = 1.0e-6
);
assert_relative_eq!(dq.translation().vector.y, 3.0, epsilon = 1.0e-6);
sourcepub fn try_sclerp(
&self,
other: &Unit<DualQuaternion<T>>,
t: T,
epsilon: T
) -> Option<Unit<DualQuaternion<T>>>where
T: RealField,
pub fn try_sclerp( &self, other: &Unit<DualQuaternion<T>>, t: T, epsilon: T ) -> Option<Unit<DualQuaternion<T>>>where T: RealField,
Computes the screw-linear interpolation between two unit quaternions or returns None
if both quaternions are approximately 180 degrees apart (in which case the interpolation is
not well-defined).
Arguments
self
: the first quaternion to interpolate from.other
: the second quaternion to interpolate toward.t
: the interpolation parameter. Should be between 0 and 1.epsilon
: the value below which the sinus of the angle separating both quaternion must be to returnNone
.
sourcepub fn rotation(&self) -> Unit<Quaternion<T>>
pub fn rotation(&self) -> Unit<Quaternion<T>>
Return the rotation part of this unit dual quaternion.
let dq = UnitDualQuaternion::from_parts(
Vector3::new(0.0, 3.0, 0.0).into(),
UnitQuaternion::from_euler_angles(std::f32::consts::FRAC_PI_4, 0.0, 0.0)
);
assert_relative_eq!(
dq.rotation().angle(), std::f32::consts::FRAC_PI_4, epsilon = 1.0e-6
);
sourcepub fn translation(&self) -> Translation<T, 3>
pub fn translation(&self) -> Translation<T, 3>
Return the translation part of this unit dual quaternion.
let dq = UnitDualQuaternion::from_parts(
Vector3::new(0.0, 3.0, 0.0).into(),
UnitQuaternion::from_euler_angles(std::f32::consts::FRAC_PI_4, 0.0, 0.0)
);
assert_relative_eq!(
dq.translation().vector, Vector3::new(0.0, 3.0, 0.0), epsilon = 1.0e-6
);
sourcepub fn to_isometry(self) -> Isometry<T, Unit<Quaternion<T>>, 3>
pub fn to_isometry(self) -> Isometry<T, Unit<Quaternion<T>>, 3>
Builds an isometry from this unit dual quaternion.
let rotation = UnitQuaternion::from_euler_angles(std::f32::consts::PI, 0.0, 0.0);
let translation = Vector3::new(1.0, 3.0, 2.5);
let dq = UnitDualQuaternion::from_parts(
translation.into(),
rotation
);
let iso = dq.to_isometry();
assert_relative_eq!(iso.rotation.angle(), std::f32::consts::PI, epsilon = 1.0e-6);
assert_relative_eq!(iso.translation.vector, translation, epsilon = 1.0e-6);
sourcepub fn transform_point(&self, pt: &OPoint<T, Const<3>>) -> OPoint<T, Const<3>>
pub fn transform_point(&self, pt: &OPoint<T, Const<3>>) -> OPoint<T, Const<3>>
Rotate and translate a point by this unit dual quaternion interpreted as an isometry.
This is the same as the multiplication self * pt
.
let dq = UnitDualQuaternion::from_parts(
Vector3::new(0.0, 3.0, 0.0).into(),
UnitQuaternion::from_euler_angles(std::f32::consts::FRAC_PI_2, 0.0, 0.0)
);
let point = Point3::new(1.0, 2.0, 3.0);
assert_relative_eq!(
dq.transform_point(&point), Point3::new(1.0, 0.0, 2.0), epsilon = 1.0e-6
);
sourcepub fn transform_vector(
&self,
v: &Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>>
) -> Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>>
pub fn transform_vector( &self, v: &Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>> ) -> Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>>
Rotate a vector by this unit dual quaternion, ignoring the translational component.
This is the same as the multiplication self * v
.
let dq = UnitDualQuaternion::from_parts(
Vector3::new(0.0, 3.0, 0.0).into(),
UnitQuaternion::from_euler_angles(std::f32::consts::FRAC_PI_2, 0.0, 0.0)
);
let vector = Vector3::new(1.0, 2.0, 3.0);
assert_relative_eq!(
dq.transform_vector(&vector), Vector3::new(1.0, -3.0, 2.0), epsilon = 1.0e-6
);
sourcepub fn inverse_transform_point(
&self,
pt: &OPoint<T, Const<3>>
) -> OPoint<T, Const<3>>
pub fn inverse_transform_point( &self, pt: &OPoint<T, Const<3>> ) -> OPoint<T, Const<3>>
Rotate and translate a point by the inverse of this unit quaternion.
This may be cheaper than inverting the unit dual quaternion and transforming the point.
let dq = UnitDualQuaternion::from_parts(
Vector3::new(0.0, 3.0, 0.0).into(),
UnitQuaternion::from_euler_angles(std::f32::consts::FRAC_PI_2, 0.0, 0.0)
);
let point = Point3::new(1.0, 2.0, 3.0);
assert_relative_eq!(
dq.inverse_transform_point(&point), Point3::new(1.0, 3.0, 1.0), epsilon = 1.0e-6
);
sourcepub fn inverse_transform_vector(
&self,
v: &Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>>
) -> Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>>
pub fn inverse_transform_vector( &self, v: &Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>> ) -> Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>>
Rotate a vector by the inverse of this unit quaternion, ignoring the translational component.
This may be cheaper than inverting the unit dual quaternion and transforming the vector.
let dq = UnitDualQuaternion::from_parts(
Vector3::new(0.0, 3.0, 0.0).into(),
UnitQuaternion::from_euler_angles(std::f32::consts::FRAC_PI_2, 0.0, 0.0)
);
let vector = Vector3::new(1.0, 2.0, 3.0);
assert_relative_eq!(
dq.inverse_transform_vector(&vector), Vector3::new(1.0, 3.0, -2.0), epsilon = 1.0e-6
);
sourcepub fn inverse_transform_unit_vector(
&self,
v: &Unit<Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>>>
) -> Unit<Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>>>
pub fn inverse_transform_unit_vector( &self, v: &Unit<Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>>> ) -> Unit<Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, ArrayStorage<T, 3, 1>>>
Rotate a unit vector by the inverse of this unit quaternion, ignoring the translational component. This may be cheaper than inverting the unit dual quaternion and transforming the vector.
let dq = UnitDualQuaternion::from_parts(
Vector3::new(0.0, 3.0, 0.0).into(),
UnitQuaternion::from_euler_angles(std::f32::consts::FRAC_PI_2, 0.0, 0.0)
);
let vector = Unit::new_unchecked(Vector3::new(0.0, 1.0, 0.0));
assert_relative_eq!(
dq.inverse_transform_unit_vector(&vector),
Unit::new_unchecked(Vector3::new(0.0, 0.0, -1.0)),
epsilon = 1.0e-6
);
source§impl<T> Unit<DualQuaternion<T>>where
T: SimdRealField + RealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Unit<DualQuaternion<T>>where T: SimdRealField + RealField, <T as SimdValue>::Element: SimdRealField,
sourcepub fn to_homogeneous(
self
) -> Matrix<T, Const<nalgebra::::base::dimension::U4::{constant#0}>, Const<nalgebra::::base::dimension::U4::{constant#0}>, ArrayStorage<T, 4, 4>>
pub fn to_homogeneous( self ) -> Matrix<T, Const<nalgebra::::base::dimension::U4::{constant#0}>, Const<nalgebra::::base::dimension::U4::{constant#0}>, ArrayStorage<T, 4, 4>>
Converts this unit dual quaternion interpreted as an isometry into its equivalent homogeneous transformation matrix.
let dq = UnitDualQuaternion::from_parts(
Vector3::new(1.0, 3.0, 2.0).into(),
UnitQuaternion::from_axis_angle(&Vector3::z_axis(), std::f32::consts::FRAC_PI_6)
);
let expected = Matrix4::new(0.8660254, -0.5, 0.0, 1.0,
0.5, 0.8660254, 0.0, 3.0,
0.0, 0.0, 1.0, 2.0,
0.0, 0.0, 0.0, 1.0);
assert_relative_eq!(dq.to_homogeneous(), expected, epsilon = 1.0e-6);
source§impl<T> Unit<DualQuaternion<T>>where
T: SimdRealField,
impl<T> Unit<DualQuaternion<T>>where T: SimdRealField,
sourcepub fn identity() -> Unit<DualQuaternion<T>>
pub fn identity() -> Unit<DualQuaternion<T>>
The unit dual quaternion multiplicative identity, which also represents the identity transformation as an isometry.
let ident = UnitDualQuaternion::identity();
let point = Point3::new(1.0, -4.3, 3.33);
assert_eq!(ident * point, point);
assert_eq!(ident, ident.inverse());
sourcepub fn cast<To>(self) -> Unit<DualQuaternion<To>>where
To: Scalar,
Unit<DualQuaternion<To>>: SupersetOf<Unit<DualQuaternion<T>>>,
pub fn cast<To>(self) -> Unit<DualQuaternion<To>>where To: Scalar, Unit<DualQuaternion<To>>: SupersetOf<Unit<DualQuaternion<T>>>,
Cast the components of self
to another type.
Example
let q = UnitDualQuaternion::<f64>::identity();
let q2 = q.cast::<f32>();
assert_eq!(q2, UnitDualQuaternion::<f32>::identity());
source§impl<T> Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
sourcepub fn from_parts(
translation: Translation<T, 3>,
rotation: Unit<Quaternion<T>>
) -> Unit<DualQuaternion<T>>
pub fn from_parts( translation: Translation<T, 3>, rotation: Unit<Quaternion<T>> ) -> Unit<DualQuaternion<T>>
Return a dual quaternion representing the translation and orientation given by the provided rotation quaternion and translation vector.
let dq = UnitDualQuaternion::from_parts(
Vector3::new(0.0, 3.0, 0.0).into(),
UnitQuaternion::from_euler_angles(std::f32::consts::FRAC_PI_2, 0.0, 0.0)
);
let point = Point3::new(1.0, 2.0, 3.0);
assert_relative_eq!(dq * point, Point3::new(1.0, 0.0, 2.0), epsilon = 1.0e-6);
sourcepub fn from_isometry(
isometry: &Isometry<T, Unit<Quaternion<T>>, 3>
) -> Unit<DualQuaternion<T>>
pub fn from_isometry( isometry: &Isometry<T, Unit<Quaternion<T>>, 3> ) -> Unit<DualQuaternion<T>>
Return a unit dual quaternion representing the translation and orientation given by the provided isometry.
let iso = Isometry3::from_parts(
Vector3::new(0.0, 3.0, 0.0).into(),
UnitQuaternion::from_euler_angles(std::f32::consts::FRAC_PI_2, 0.0, 0.0)
);
let dq = UnitDualQuaternion::from_isometry(&iso);
let point = Point3::new(1.0, 2.0, 3.0);
assert_relative_eq!(dq * point, iso * point, epsilon = 1.0e-6);
sourcepub fn from_rotation(rotation: Unit<Quaternion<T>>) -> Unit<DualQuaternion<T>>
pub fn from_rotation(rotation: Unit<Quaternion<T>>) -> Unit<DualQuaternion<T>>
Creates a dual quaternion from a unit quaternion rotation.
Example
let q = Quaternion::new(1.0, 2.0, 3.0, 4.0);
let rot = UnitQuaternion::new_normalize(q);
let dq = UnitDualQuaternion::from_rotation(rot);
assert_relative_eq!(dq.as_ref().real.norm(), 1.0, epsilon = 1.0e-6);
assert_eq!(dq.as_ref().dual.norm(), 0.0);
Trait Implementations§
source§impl<T> AbsDiffEq<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: RealField<Epsilon = T> + AbsDiffEq<T>,
impl<T> AbsDiffEq<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: RealField<Epsilon = T> + AbsDiffEq<T>,
source§fn default_epsilon(
) -> <Unit<DualQuaternion<T>> as AbsDiffEq<Unit<DualQuaternion<T>>>>::Epsilon
fn default_epsilon( ) -> <Unit<DualQuaternion<T>> as AbsDiffEq<Unit<DualQuaternion<T>>>>::Epsilon
source§fn abs_diff_eq(
&self,
other: &Unit<DualQuaternion<T>>,
epsilon: <Unit<DualQuaternion<T>> as AbsDiffEq<Unit<DualQuaternion<T>>>>::Epsilon
) -> bool
fn abs_diff_eq( &self, other: &Unit<DualQuaternion<T>>, epsilon: <Unit<DualQuaternion<T>> as AbsDiffEq<Unit<DualQuaternion<T>>>>::Epsilon ) -> bool
§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<'de, T> Deserialize<'de> for Unit<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for Unit<T>where T: Deserialize<'de>,
source§fn deserialize<D>(
deserializer: D
) -> Result<Unit<T>, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>( deserializer: D ) -> Result<Unit<T>, <D as Deserializer<'de>>::Error>where D: Deserializer<'de>,
source§impl<'b, T> Div<&'b Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> Div<&'b Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
/
operator.source§fn div(
self,
rhs: &'b Isometry<T, Unit<Quaternion<T>>, 3>
) -> <Unit<DualQuaternion<T>> as Div<&'b Isometry<T, Unit<Quaternion<T>>, 3>>>::Output
fn div( self, rhs: &'b Isometry<T, Unit<Quaternion<T>>, 3> ) -> <Unit<DualQuaternion<T>> as Div<&'b Isometry<T, Unit<Quaternion<T>>, 3>>>::Output
/
operation. Read moresource§impl<'b, T> Div<&'b Translation<T, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> Div<&'b Translation<T, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
/
operator.source§fn div(
self,
rhs: &'b Translation<T, 3>
) -> <Unit<DualQuaternion<T>> as Div<&'b Translation<T, 3>>>::Output
fn div( self, rhs: &'b Translation<T, 3> ) -> <Unit<DualQuaternion<T>> as Div<&'b Translation<T, 3>>>::Output
/
operation. Read moresource§impl<'b, T> Div<&'b Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> Div<&'b Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
/
operator.source§fn div(
self,
rhs: &'b Unit<DualQuaternion<T>>
) -> <Unit<DualQuaternion<T>> as Div<&'b Unit<DualQuaternion<T>>>>::Output
fn div( self, rhs: &'b Unit<DualQuaternion<T>> ) -> <Unit<DualQuaternion<T>> as Div<&'b Unit<DualQuaternion<T>>>>::Output
/
operation. Read moresource§impl<'b, T> Div<&'b Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> Div<&'b Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
/
operator.source§fn div(
self,
rhs: &'b Unit<Quaternion<T>>
) -> <Unit<DualQuaternion<T>> as Div<&'b Unit<Quaternion<T>>>>::Output
fn div( self, rhs: &'b Unit<Quaternion<T>> ) -> <Unit<DualQuaternion<T>> as Div<&'b Unit<Quaternion<T>>>>::Output
/
operation. Read moresource§impl<T> Div<Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Div<Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
/
operator.source§fn div(
self,
rhs: Isometry<T, Unit<Quaternion<T>>, 3>
) -> <Unit<DualQuaternion<T>> as Div<Isometry<T, Unit<Quaternion<T>>, 3>>>::Output
fn div( self, rhs: Isometry<T, Unit<Quaternion<T>>, 3> ) -> <Unit<DualQuaternion<T>> as Div<Isometry<T, Unit<Quaternion<T>>, 3>>>::Output
/
operation. Read moresource§impl<T> Div<Translation<T, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Div<Translation<T, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
/
operator.source§fn div(
self,
rhs: Translation<T, 3>
) -> <Unit<DualQuaternion<T>> as Div<Translation<T, 3>>>::Output
fn div( self, rhs: Translation<T, 3> ) -> <Unit<DualQuaternion<T>> as Div<Translation<T, 3>>>::Output
/
operation. Read moresource§impl<T> Div<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Div<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
/
operator.source§fn div(
self,
rhs: Unit<DualQuaternion<T>>
) -> <Unit<DualQuaternion<T>> as Div<Unit<DualQuaternion<T>>>>::Output
fn div( self, rhs: Unit<DualQuaternion<T>> ) -> <Unit<DualQuaternion<T>> as Div<Unit<DualQuaternion<T>>>>::Output
/
operation. Read moresource§impl<T> Div<Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Div<Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
/
operator.source§fn div(
self,
rhs: Unit<Quaternion<T>>
) -> <Unit<DualQuaternion<T>> as Div<Unit<Quaternion<T>>>>::Output
fn div( self, rhs: Unit<Quaternion<T>> ) -> <Unit<DualQuaternion<T>> as Div<Unit<Quaternion<T>>>>::Output
/
operation. Read moresource§impl<'b, T> DivAssign<&'b Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> DivAssign<&'b Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: &'b Isometry<T, Unit<Quaternion<T>>, 3>)
fn div_assign(&mut self, rhs: &'b Isometry<T, Unit<Quaternion<T>>, 3>)
/=
operation. Read moresource§impl<'b, T> DivAssign<&'b Translation<T, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> DivAssign<&'b Translation<T, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: &'b Translation<T, 3>)
fn div_assign(&mut self, rhs: &'b Translation<T, 3>)
/=
operation. Read moresource§impl<'b, T> DivAssign<&'b Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> DivAssign<&'b Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: &'b Unit<DualQuaternion<T>>)
fn div_assign(&mut self, rhs: &'b Unit<DualQuaternion<T>>)
/=
operation. Read moresource§impl<'b, T> DivAssign<&'b Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> DivAssign<&'b Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: &'b Unit<Quaternion<T>>)
fn div_assign(&mut self, rhs: &'b Unit<Quaternion<T>>)
/=
operation. Read moresource§impl<T> DivAssign<Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> DivAssign<Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: Isometry<T, Unit<Quaternion<T>>, 3>)
fn div_assign(&mut self, rhs: Isometry<T, Unit<Quaternion<T>>, 3>)
/=
operation. Read moresource§impl<T> DivAssign<Translation<T, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> DivAssign<Translation<T, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: Translation<T, 3>)
fn div_assign(&mut self, rhs: Translation<T, 3>)
/=
operation. Read moresource§impl<T> DivAssign<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> DivAssign<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: Unit<DualQuaternion<T>>)
fn div_assign(&mut self, rhs: Unit<DualQuaternion<T>>)
/=
operation. Read moresource§impl<T> DivAssign<Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> DivAssign<Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn div_assign(&mut self, rhs: Unit<Quaternion<T>>)
fn div_assign(&mut self, rhs: Unit<Quaternion<T>>)
/=
operation. Read moresource§impl<T> From<Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> From<Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn from(iso: Isometry<T, Unit<Quaternion<T>>, 3>) -> Unit<DualQuaternion<T>>
fn from(iso: Isometry<T, Unit<Quaternion<T>>, 3>) -> Unit<DualQuaternion<T>>
source§impl<'b, T> Mul<&'b DualQuaternion<T>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> Mul<&'b DualQuaternion<T>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = DualQuaternion<T>
type Output = DualQuaternion<T>
*
operator.source§fn mul(
self,
rhs: &'b DualQuaternion<T>
) -> <Unit<DualQuaternion<T>> as Mul<&'b DualQuaternion<T>>>::Output
fn mul( self, rhs: &'b DualQuaternion<T> ) -> <Unit<DualQuaternion<T>> as Mul<&'b DualQuaternion<T>>>::Output
*
operation. Read moresource§impl<'b, T> Mul<&'b Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> Mul<&'b Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
*
operator.source§fn mul(
self,
rhs: &'b Isometry<T, Unit<Quaternion<T>>, 3>
) -> <Unit<DualQuaternion<T>> as Mul<&'b Isometry<T, Unit<Quaternion<T>>, 3>>>::Output
fn mul( self, rhs: &'b Isometry<T, Unit<Quaternion<T>>, 3> ) -> <Unit<DualQuaternion<T>> as Mul<&'b Isometry<T, Unit<Quaternion<T>>, 3>>>::Output
*
operation. Read moresource§impl<'b, T, SB> Mul<&'b Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, SB>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
SB: Storage<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>>,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T, SB> Mul<&'b Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, SB>> for Unit<DualQuaternion<T>>where T: SimdRealField, SB: Storage<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>>, <T as SimdValue>::Element: SimdRealField,
source§impl<'b, T> Mul<&'b OPoint<T, Const<3>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> Mul<&'b OPoint<T, Const<3>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§impl<'b, T> Mul<&'b Translation<T, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> Mul<&'b Translation<T, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
*
operator.source§fn mul(
self,
rhs: &'b Translation<T, 3>
) -> <Unit<DualQuaternion<T>> as Mul<&'b Translation<T, 3>>>::Output
fn mul( self, rhs: &'b Translation<T, 3> ) -> <Unit<DualQuaternion<T>> as Mul<&'b Translation<T, 3>>>::Output
*
operation. Read moresource§impl<'b, T> Mul<&'b Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> Mul<&'b Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
*
operator.source§fn mul(
self,
rhs: &'b Unit<DualQuaternion<T>>
) -> <Unit<DualQuaternion<T>> as Mul<&'b Unit<DualQuaternion<T>>>>::Output
fn mul( self, rhs: &'b Unit<DualQuaternion<T>> ) -> <Unit<DualQuaternion<T>> as Mul<&'b Unit<DualQuaternion<T>>>>::Output
*
operation. Read moresource§impl<'b, T, SB> Mul<&'b Unit<Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, SB>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
SB: Storage<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>>,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T, SB> Mul<&'b Unit<Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, SB>>> for Unit<DualQuaternion<T>>where T: SimdRealField, SB: Storage<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>>, <T as SimdValue>::Element: SimdRealField,
source§impl<'b, T> Mul<&'b Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> Mul<&'b Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
*
operator.source§fn mul(
self,
rhs: &'b Unit<Quaternion<T>>
) -> <Unit<DualQuaternion<T>> as Mul<&'b Unit<Quaternion<T>>>>::Output
fn mul( self, rhs: &'b Unit<Quaternion<T>> ) -> <Unit<DualQuaternion<T>> as Mul<&'b Unit<Quaternion<T>>>>::Output
*
operation. Read moresource§impl<T> Mul<DualQuaternion<T>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Mul<DualQuaternion<T>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = DualQuaternion<T>
type Output = DualQuaternion<T>
*
operator.source§fn mul(
self,
rhs: DualQuaternion<T>
) -> <Unit<DualQuaternion<T>> as Mul<DualQuaternion<T>>>::Output
fn mul( self, rhs: DualQuaternion<T> ) -> <Unit<DualQuaternion<T>> as Mul<DualQuaternion<T>>>::Output
*
operation. Read moresource§impl<T> Mul<Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Mul<Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
*
operator.source§fn mul(
self,
rhs: Isometry<T, Unit<Quaternion<T>>, 3>
) -> <Unit<DualQuaternion<T>> as Mul<Isometry<T, Unit<Quaternion<T>>, 3>>>::Output
fn mul( self, rhs: Isometry<T, Unit<Quaternion<T>>, 3> ) -> <Unit<DualQuaternion<T>> as Mul<Isometry<T, Unit<Quaternion<T>>, 3>>>::Output
*
operation. Read moresource§impl<T, SB> Mul<Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, SB>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
SB: Storage<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>>,
<T as SimdValue>::Element: SimdRealField,
impl<T, SB> Mul<Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, SB>> for Unit<DualQuaternion<T>>where T: SimdRealField, SB: Storage<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>>, <T as SimdValue>::Element: SimdRealField,
source§impl<T> Mul<OPoint<T, Const<3>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Mul<OPoint<T, Const<3>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§impl<T> Mul<Translation<T, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Mul<Translation<T, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
*
operator.source§fn mul(
self,
rhs: Translation<T, 3>
) -> <Unit<DualQuaternion<T>> as Mul<Translation<T, 3>>>::Output
fn mul( self, rhs: Translation<T, 3> ) -> <Unit<DualQuaternion<T>> as Mul<Translation<T, 3>>>::Output
*
operation. Read moresource§impl<T> Mul<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Mul<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
*
operator.source§fn mul(
self,
rhs: Unit<DualQuaternion<T>>
) -> <Unit<DualQuaternion<T>> as Mul<Unit<DualQuaternion<T>>>>::Output
fn mul( self, rhs: Unit<DualQuaternion<T>> ) -> <Unit<DualQuaternion<T>> as Mul<Unit<DualQuaternion<T>>>>::Output
*
operation. Read moresource§impl<T, SB> Mul<Unit<Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, SB>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
SB: Storage<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>>,
<T as SimdValue>::Element: SimdRealField,
impl<T, SB> Mul<Unit<Matrix<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>, SB>>> for Unit<DualQuaternion<T>>where T: SimdRealField, SB: Storage<T, Const<nalgebra::::base::dimension::U3::{constant#0}>, Const<1>>, <T as SimdValue>::Element: SimdRealField,
source§impl<T> Mul<Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Mul<Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
§type Output = Unit<DualQuaternion<T>>
type Output = Unit<DualQuaternion<T>>
*
operator.source§fn mul(
self,
rhs: Unit<Quaternion<T>>
) -> <Unit<DualQuaternion<T>> as Mul<Unit<Quaternion<T>>>>::Output
fn mul( self, rhs: Unit<Quaternion<T>> ) -> <Unit<DualQuaternion<T>> as Mul<Unit<Quaternion<T>>>>::Output
*
operation. Read moresource§impl<'b, T> MulAssign<&'b Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> MulAssign<&'b Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: &'b Isometry<T, Unit<Quaternion<T>>, 3>)
fn mul_assign(&mut self, rhs: &'b Isometry<T, Unit<Quaternion<T>>, 3>)
*=
operation. Read moresource§impl<'b, T> MulAssign<&'b Translation<T, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> MulAssign<&'b Translation<T, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: &'b Translation<T, 3>)
fn mul_assign(&mut self, rhs: &'b Translation<T, 3>)
*=
operation. Read moresource§impl<'b, T> MulAssign<&'b Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> MulAssign<&'b Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: &'b Unit<DualQuaternion<T>>)
fn mul_assign(&mut self, rhs: &'b Unit<DualQuaternion<T>>)
*=
operation. Read moresource§impl<'b, T> MulAssign<&'b Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<'b, T> MulAssign<&'b Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: &'b Unit<Quaternion<T>>)
fn mul_assign(&mut self, rhs: &'b Unit<Quaternion<T>>)
*=
operation. Read moresource§impl<T> MulAssign<Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> MulAssign<Isometry<T, Unit<Quaternion<T>>, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: Isometry<T, Unit<Quaternion<T>>, 3>)
fn mul_assign(&mut self, rhs: Isometry<T, Unit<Quaternion<T>>, 3>)
*=
operation. Read moresource§impl<T> MulAssign<Translation<T, 3>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> MulAssign<Translation<T, 3>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: Translation<T, 3>)
fn mul_assign(&mut self, rhs: Translation<T, 3>)
*=
operation. Read moresource§impl<T> MulAssign<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> MulAssign<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: Unit<DualQuaternion<T>>)
fn mul_assign(&mut self, rhs: Unit<DualQuaternion<T>>)
*=
operation. Read moresource§impl<T> MulAssign<Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> MulAssign<Unit<Quaternion<T>>> for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn mul_assign(&mut self, rhs: Unit<Quaternion<T>>)
fn mul_assign(&mut self, rhs: Unit<Quaternion<T>>)
*=
operation. Read moresource§impl<T> Neg for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> Neg for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§impl<T> One for Unit<DualQuaternion<T>>where
T: SimdRealField,
<T as SimdValue>::Element: SimdRealField,
impl<T> One for Unit<DualQuaternion<T>>where T: SimdRealField, <T as SimdValue>::Element: SimdRealField,
source§fn one() -> Unit<DualQuaternion<T>>
fn one() -> Unit<DualQuaternion<T>>
source§impl<T> PartialEq<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: Scalar + ClosedNeg + PartialEq<T> + SimdRealField,
impl<T> PartialEq<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: Scalar + ClosedNeg + PartialEq<T> + SimdRealField,
source§impl<T> RelativeEq<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where
T: RealField<Epsilon = T> + RelativeEq<T>,
impl<T> RelativeEq<Unit<DualQuaternion<T>>> for Unit<DualQuaternion<T>>where T: RealField<Epsilon = T> + RelativeEq<T>,
source§fn default_max_relative(
) -> <Unit<DualQuaternion<T>> as AbsDiffEq<Unit<DualQuaternion<T>>>>::Epsilon
fn default_max_relative( ) -> <Unit<DualQuaternion<T>> as AbsDiffEq<Unit<DualQuaternion<T>>>>::Epsilon
source§fn relative_eq(
&self,
other: &Unit<DualQuaternion<T>>,
epsilon: <Unit<DualQuaternion<T>> as AbsDiffEq<Unit<DualQuaternion<T>>>>::Epsilon,
max_relative: <Unit<DualQuaternion<T>> as AbsDiffEq<Unit<DualQuaternion<T>>>>::Epsilon
) -> bool
fn relative_eq( &self, other: &Unit<DualQuaternion<T>>, epsilon: <Unit<DualQuaternion<T>> as AbsDiffEq<Unit<DualQuaternion<T>>>>::Epsilon, max_relative: <Unit<DualQuaternion<T>> as AbsDiffEq<Unit<DualQuaternion<T>>>>::Epsilon ) -> bool
§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> Serialize for Unit<T>where
T: Serialize,
impl<T> Serialize for Unit<T>where T: Serialize,
source§fn serialize<S>(
&self,
serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>( &self, serializer: S ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where S: Serializer,
source§impl<T1, T2> SubsetOf<Isometry<T2, Unit<Quaternion<T2>>, 3>> for Unit<DualQuaternion<T1>>where
T1: RealField,
T2: RealField + SupersetOf<T1>,
impl<T1, T2> SubsetOf<Isometry<T2, Unit<Quaternion<T2>>, 3>> for Unit<DualQuaternion<T1>>where T1: RealField, T2: RealField + SupersetOf<T1>,
source§fn to_superset(&self) -> Isometry<T2, Unit<Quaternion<T2>>, 3>
fn to_superset(&self) -> Isometry<T2, Unit<Quaternion<T2>>, 3>
self
to the equivalent element of its superset.source§fn is_in_subset(iso: &Isometry<T2, Unit<Quaternion<T2>>, 3>) -> bool
fn is_in_subset(iso: &Isometry<T2, Unit<Quaternion<T2>>, 3>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(
iso: &Isometry<T2, Unit<Quaternion<T2>>, 3>
) -> Unit<DualQuaternion<T1>>
fn from_superset_unchecked( iso: &Isometry<T2, Unit<Quaternion<T2>>, 3> ) -> Unit<DualQuaternion<T1>>
self.to_superset
but without any property checks. Always succeeds.§fn from_superset(element: &T) -> Option<Self>
fn from_superset(element: &T) -> Option<Self>
self
from the equivalent element of its
superset. Read moresource§impl<T1, T2> SubsetOf<Matrix<T2, Const<nalgebra::::base::dimension::U4::{constant#0}>, Const<nalgebra::::base::dimension::U4::{constant#0}>, ArrayStorage<T2, 4, 4>>> for Unit<DualQuaternion<T1>>where
T1: RealField,
T2: RealField + SupersetOf<T1>,
impl<T1, T2> SubsetOf<Matrix<T2, Const<nalgebra::::base::dimension::U4::{constant#0}>, Const<nalgebra::::base::dimension::U4::{constant#0}>, ArrayStorage<T2, 4, 4>>> for Unit<DualQuaternion<T1>>where T1: RealField, T2: RealField + SupersetOf<T1>,
source§fn to_superset(
&self
) -> Matrix<T2, Const<nalgebra::::base::dimension::U4::{constant#0}>, Const<nalgebra::::base::dimension::U4::{constant#0}>, ArrayStorage<T2, 4, 4>>
fn to_superset( &self ) -> Matrix<T2, Const<nalgebra::::base::dimension::U4::{constant#0}>, Const<nalgebra::::base::dimension::U4::{constant#0}>, ArrayStorage<T2, 4, 4>>
self
to the equivalent element of its superset.source§fn is_in_subset(
m: &Matrix<T2, Const<nalgebra::::base::dimension::U4::{constant#0}>, Const<nalgebra::::base::dimension::U4::{constant#0}>, ArrayStorage<T2, 4, 4>>
) -> bool
fn is_in_subset( m: &Matrix<T2, Const<nalgebra::::base::dimension::U4::{constant#0}>, Const<nalgebra::::base::dimension::U4::{constant#0}>, ArrayStorage<T2, 4, 4>> ) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(
m: &Matrix<T2, Const<nalgebra::::base::dimension::U4::{constant#0}>, Const<nalgebra::::base::dimension::U4::{constant#0}>, ArrayStorage<T2, 4, 4>>
) -> Unit<DualQuaternion<T1>>
fn from_superset_unchecked( m: &Matrix<T2, Const<nalgebra::::base::dimension::U4::{constant#0}>, Const<nalgebra::::base::dimension::U4::{constant#0}>, ArrayStorage<T2, 4, 4>> ) -> Unit<DualQuaternion<T1>>
self.to_superset
but without any property checks. Always succeeds.§fn from_superset(element: &T) -> Option<Self>
fn from_superset(element: &T) -> Option<Self>
self
from the equivalent element of its
superset. Read moresource§impl<T1, T2> SubsetOf<Similarity<T2, Unit<Quaternion<T2>>, 3>> for Unit<DualQuaternion<T1>>where
T1: RealField,
T2: RealField + SupersetOf<T1>,
impl<T1, T2> SubsetOf<Similarity<T2, Unit<Quaternion<T2>>, 3>> for Unit<DualQuaternion<T1>>where T1: RealField, T2: RealField + SupersetOf<T1>,
source§fn to_superset(&self) -> Similarity<T2, Unit<Quaternion<T2>>, 3>
fn to_superset(&self) -> Similarity<T2, Unit<Quaternion<T2>>, 3>
self
to the equivalent element of its superset.source§fn is_in_subset(sim: &Similarity<T2, Unit<Quaternion<T2>>, 3>) -> bool
fn is_in_subset(sim: &Similarity<T2, Unit<Quaternion<T2>>, 3>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(
sim: &Similarity<T2, Unit<Quaternion<T2>>, 3>
) -> Unit<DualQuaternion<T1>>
fn from_superset_unchecked( sim: &Similarity<T2, Unit<Quaternion<T2>>, 3> ) -> Unit<DualQuaternion<T1>>
self.to_superset
but without any property checks. Always succeeds.§fn from_superset(element: &T) -> Option<Self>
fn from_superset(element: &T) -> Option<Self>
self
from the equivalent element of its
superset. Read moresource§impl<T1, T2, C> SubsetOf<Transform<T2, C, 3>> for Unit<DualQuaternion<T1>>where
T1: RealField,
T2: RealField + SupersetOf<T1>,
C: SuperTCategoryOf<TAffine>,
impl<T1, T2, C> SubsetOf<Transform<T2, C, 3>> for Unit<DualQuaternion<T1>>where T1: RealField, T2: RealField + SupersetOf<T1>, C: SuperTCategoryOf<TAffine>,
source§fn to_superset(&self) -> Transform<T2, C, 3>
fn to_superset(&self) -> Transform<T2, C, 3>
self
to the equivalent element of its superset.source§fn is_in_subset(t: &Transform<T2, C, 3>) -> bool
fn is_in_subset(t: &Transform<T2, C, 3>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(t: &Transform<T2, C, 3>) -> Unit<DualQuaternion<T1>>
fn from_superset_unchecked(t: &Transform<T2, C, 3>) -> Unit<DualQuaternion<T1>>
self.to_superset
but without any property checks. Always succeeds.§fn from_superset(element: &T) -> Option<Self>
fn from_superset(element: &T) -> Option<Self>
self
from the equivalent element of its
superset. Read moresource§impl<T1, T2> SubsetOf<Unit<DualQuaternion<T2>>> for Unit<DualQuaternion<T1>>where
T1: SimdRealField,
T2: SimdRealField + SupersetOf<T1>,
impl<T1, T2> SubsetOf<Unit<DualQuaternion<T2>>> for Unit<DualQuaternion<T1>>where T1: SimdRealField, T2: SimdRealField + SupersetOf<T1>,
source§fn to_superset(&self) -> Unit<DualQuaternion<T2>>
fn to_superset(&self) -> Unit<DualQuaternion<T2>>
self
to the equivalent element of its superset.source§fn is_in_subset(dq: &Unit<DualQuaternion<T2>>) -> bool
fn is_in_subset(dq: &Unit<DualQuaternion<T2>>) -> bool
element
is actually part of the subset Self
(and can be converted to it).source§fn from_superset_unchecked(
dq: &Unit<DualQuaternion<T2>>
) -> Unit<DualQuaternion<T1>>
fn from_superset_unchecked( dq: &Unit<DualQuaternion<T2>> ) -> Unit<DualQuaternion<T1>>
self.to_superset
but without any property checks. Always succeeds.§fn from_superset(element: &T) -> Option<Self>
fn from_superset(element: &T) -> Option<Self>
self
from the equivalent element of its
superset. Read more