DRot2

Struct DRot2 

Source
#[repr(C)]
pub struct DRot2 { pub re: f64, pub im: f64, }
Expand description

A 2D rotation represented as a unit complex number (f64 precision).

The rotation is stored as re + im * i where re = cos(angle) and im = sin(angle).

Fields§

§re: f64

Real part (cosine of the angle).

§im: f64

Imaginary part (sine of the angle).

Implementations§

Source§

impl DRot2

Source

pub const IDENTITY: Self

The identity rotation (no rotation).

Source

pub const fn from_cos_sin_unchecked(re: f64, im: f64) -> Self

Creates a new unit complex from cosine and sine values.

The caller must ensure that re*re + im*im = 1.

Source

pub fn from_matrix_unchecked(mat: DMat2) -> Self

Creates a rotation from a rotation matrix (without normalization).

Source

pub fn identity() -> Self

Creates the identity rotation.

Source

pub fn new(angle: f64) -> Self

Creates a rotation from an angle in radians.

Source

pub fn from_angle(angle: f64) -> Self

Creates a rotation from an angle in radians.

Source

pub fn angle(&self) -> f64

Returns the rotation angle in radians.

Source

pub fn cos(&self) -> f64

Returns the cosine of the rotation angle (the real part).

Source

pub fn sin(&self) -> f64

Returns the sine of the rotation angle (the imaginary part).

Source

pub fn inverse(self) -> Self

Returns the inverse rotation.

Source

pub fn length(&self) -> f64

Computes the length (magnitude) of self.

For a valid unit rotation, this should always be 1.0.

Source

pub fn length_squared(&self) -> f64

Computes the squared length of self.

This is faster than length() as it avoids a square root. For a valid unit rotation, this should always be 1.0.

Source

pub fn length_recip(&self) -> f64

Computes 1.0 / length().

Source

pub fn normalize(&self) -> Self

Returns self normalized to length 1.0.

For valid unit rotations this should be a no-op.

Source

pub fn is_finite(&self) -> bool

Returns true if, and only if, all elements are finite.

Source

pub fn is_nan(&self) -> bool

Returns true if any element is NaN.

Source

pub fn is_normalized(&self) -> bool

Returns whether self is of length 1.0 or not.

Uses a precision threshold of approximately 1e-4.

Source

pub fn transform_vector(&self, v: DVec2) -> DVec2

Rotates a 2D vector by this rotation.

Source

pub fn inverse_transform_vector(&self, v: DVec2) -> DVec2

Transforms a 2D vector by the inverse of this rotation.

Source

pub fn to_mat(&self) -> DMat2

Returns the rotation matrix equivalent to this rotation.

Source

pub fn from_mat(mat: DMat2) -> Self

Creates a rotation from a 2x2 rotation matrix.

The matrix should be a valid rotation matrix (orthogonal with determinant 1).

Source

pub fn from_mat_unchecked(mat: DMat2) -> Self

Creates a rotation from a 2x2 matrix without normalization.

Alias for from_matrix_unchecked.

Source

pub fn from_rotation_arc(from: DVec2, to: DVec2) -> Self

Gets the minimal rotation for transforming from to to.

Both vectors must be normalized. The rotation is in the plane spanned by the two vectors.

Source

pub fn slerp(&self, other: &Self, t: f64) -> Self

Spherical linear interpolation between two rotations.

Source

pub fn powf(&self, n: f64) -> Self

Raises this rotation to a power.

For example, powf(2.0) will return a rotation with double the angle.

Source

pub fn rotate_towards(&self, rhs: &Self, max_angle: f64) -> Self

Rotates self towards rhs up to max_angle (in radians).

When max_angle is 0.0, the result will be equal to self. When max_angle is equal to self.angle_between(rhs), the result will be equal to rhs. If max_angle is negative, rotates towards the exact opposite of rhs. Will not go past the target.

Source

pub fn angle_between(&self, rhs: &Self) -> f64

Returns the angle (in radians) between self and rhs.

Source

pub fn dot(&self, rhs: Self) -> f64

Computes the dot product of self and rhs.

The dot product is equal to the cosine of the angle between two rotations.

Source

pub fn lerp(&self, rhs: Self, s: f64) -> Self

Performs a linear interpolation between self and rhs based on the value s.

When s is 0.0, the result will be equal to self. When s is 1.0, the result will be equal to rhs. For rotations, slerp is usually preferred over lerp.

Source

pub fn normalize_mut(&mut self)

Normalizes self in place.

Does nothing if self is already normalized or zero length.

Trait Implementations§

Source§

impl AbsDiffEq for DRot2

Available on crate feature approx only.
Source§

type Epsilon = f64

Used for specifying relative comparisons.
Source§

fn default_epsilon() -> Self::Epsilon

The default tolerance to use when testing values that are close together. Read more
Source§

fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool

A test for equality that uses the absolute difference to compute the approximate equality of two numbers.
Source§

fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool

The inverse of AbsDiffEq::abs_diff_eq.
Source§

impl Clone for DRot2

Source§

fn clone(&self) -> DRot2

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DRot2

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DRot2

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl From<DRot2> for DPose2

Source§

fn from(rotation: DRot2) -> Self

Converts to this type from the input type.
Source§

impl From<DRot2> for Rot2

Source§

fn from(r: DRot2) -> Self

Converts to this type from the input type.
Source§

impl From<Rot2> for DRot2

Source§

fn from(r: Rot2) -> Self

Converts to this type from the input type.
Source§

impl Mul<DPose2> for DRot2

Source§

type Output = DPose2

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: DPose2) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<DRot2> for &DRot2

Source§

type Output = DRot2

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: DRot2) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<DRot2> for DPose2

Source§

type Output = DPose2

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: DRot2) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<DVec2> for DRot2

Source§

type Output = DVec2

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: DVec2) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul for DRot2

Source§

type Output = DRot2

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: Self) -> Self::Output

Performs the * operation. Read more
Source§

impl MulAssign<DRot2> for DPose2

Source§

fn mul_assign(&mut self, rhs: DRot2)

Performs the *= operation. Read more
Source§

impl MulAssign for DRot2

Source§

fn mul_assign(&mut self, rhs: Self)

Performs the *= operation. Read more
Source§

impl PartialEq for DRot2

Source§

fn eq(&self, other: &DRot2) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RelativeEq for DRot2

Available on crate feature approx only.
Source§

fn default_max_relative() -> Self::Epsilon

The default relative tolerance for testing values that are far-apart. Read more
Source§

fn relative_eq( &self, other: &Self, epsilon: Self::Epsilon, max_relative: Self::Epsilon, ) -> bool

A test for equality that uses a relative comparison if the values are far apart.
Source§

fn relative_ne( &self, other: &Rhs, epsilon: Self::Epsilon, max_relative: Self::Epsilon, ) -> bool

The inverse of RelativeEq::relative_eq.
Source§

impl UlpsEq for DRot2

Available on crate feature approx only.
Source§

fn default_max_ulps() -> u32

The default ULPs to tolerate when testing values that are far-apart. Read more
Source§

fn ulps_eq(&self, other: &Self, epsilon: Self::Epsilon, max_ulps: u32) -> bool

A test for equality that uses units in the last place (ULP) if the values are far apart.
Source§

fn ulps_ne(&self, other: &Rhs, epsilon: Self::Epsilon, max_ulps: u32) -> bool

The inverse of UlpsEq::ulps_eq.
Source§

impl Copy for DRot2

Source§

impl StructuralPartialEq for DRot2

Auto Trait Implementations§

§

impl Freeze for DRot2

§

impl RefUnwindSafe for DRot2

§

impl Send for DRot2

§

impl Sync for DRot2

§

impl Unpin for DRot2

§

impl UnwindSafe for DRot2

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

impl<T> Identity for T
where T: ?Sized,

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, Right> ClosedMul<Right> for T
where T: Mul<Right, Output = T> + MulAssign<Right>,

Source§

impl<T, Right> ClosedMulAssign<Right> for T
where T: ClosedMul<Right> + MulAssign<Right>,