#[repr(transparent)]pub struct DVec3(_);
Expand description
A 3-dimensional vector.
Implementations
sourceimpl DVec3
impl DVec3
sourcepub const X: DVec3 = Self(Vector3Const::X)
pub const X: DVec3 = Self(Vector3Const::X)
[1, 0, 0]
: a unit-length vector pointing along the positive X axis.
sourcepub const Y: DVec3 = Self(Vector3Const::Y)
pub const Y: DVec3 = Self(Vector3Const::Y)
[0, 1, 0]
: a unit-length vector pointing along the positive Y axis.
sourcepub const Z: DVec3 = Self(Vector3Const::Z)
pub const Z: DVec3 = Self(Vector3Const::Z)
[0, 0, 1]
: a unit-length vector pointing along the positive Z axis.
sourcepub const fn unit_x() -> DVec3
👎 Deprecated: Use Vec3::X instead
pub const fn unit_x() -> DVec3
Use Vec3::X instead
Creates a vector with values [x: 1.0, y: 0.0, z: 0.0]
.
sourcepub const fn unit_y() -> DVec3
👎 Deprecated: Use Vec3::Y instead
pub const fn unit_y() -> DVec3
Use Vec3::Y instead
Creates a vector with values [x: 0.0, y: 1.0, z: 0.0]
.
sourcepub const fn unit_z() -> DVec3
👎 Deprecated: Use Vec3::Z instead
pub const fn unit_z() -> DVec3
Use Vec3::Z instead
Creates a vector with values [x: 0.0, y: 0.0, z: 1.0]
.
sourcepub fn truncate(self) -> DVec2
pub fn truncate(self) -> DVec2
Creates a Vec2
from the x
and y
elements of self
, discarding z
.
Truncation may also be performed by using self.xy()
or Vec2::from()
.
sourcepub const fn zero() -> DVec3
👎 Deprecated: use ZERO constant instead
pub const fn zero() -> DVec3
use ZERO constant instead
Creates a vector with all elements set to 0.0
.
sourcepub const fn one() -> DVec3
👎 Deprecated: use ONE constant instead
pub const fn one() -> DVec3
use ONE constant instead
Creates a vector with all elements set to 1.0
.
sourcepub fn select(mask: BVec3, if_true: DVec3, if_false: DVec3) -> DVec3
pub fn select(mask: BVec3, if_true: DVec3, if_false: DVec3) -> DVec3
Creates a vector from the elements in if_true
and if_false
, selecting which to use
for each element of self
.
A true element in the mask uses the corresponding element from if_true
, and false
uses the element from if_false
.
sourcepub fn min(self, other: DVec3) -> DVec3
pub fn min(self, other: DVec3) -> DVec3
Returns a vector containing the mininum values for each element of self
and other
.
In other words this computes [self.x.max(other.x), self.y.max(other.y), ..]
.
sourcepub fn max(self, other: DVec3) -> DVec3
pub fn max(self, other: DVec3) -> DVec3
Returns a vector containing the maximum values for each element of self
and other
.
In other words this computes [self.x.max(other.x), self.y.max(other.y), ..]
.
sourcepub fn clamp(self, min: DVec3, max: DVec3) -> DVec3
pub fn clamp(self, min: DVec3, max: DVec3) -> DVec3
Component-wise clamping of values, similar to [std::f32::clamp
].
Each element in min
must be less-or-equal to the corresponing element in max
.
If the glam-assert
feature is enabled, the function will panic if the contract is not
met, otherwise the behavior is undefined.
sourcepub fn min_element(self) -> f64
pub fn min_element(self) -> f64
Returns the horizontal minimum of self
.
In other words this computes min(x, y, ..)
.
sourcepub fn max_element(self) -> f64
pub fn max_element(self) -> f64
Returns the horizontal maximum of self
.
In other words this computes max(x, y, ..)
.
sourcepub fn cmpeq(self, other: DVec3) -> BVec3
pub fn cmpeq(self, other: DVec3) -> BVec3
Returns a vector mask containing the result of a ==
comparison for each element of
self
and other
.
In other words, this computes [self.x == other.x, self.y == other.y, ..]
for all
elements.
sourcepub fn cmpne(self, other: DVec3) -> BVec3
pub fn cmpne(self, other: DVec3) -> BVec3
Returns a vector mask containing the result of a !=
comparison for each element of
self
and other
.
In other words this computes [self.x != other.x, self.y != other.y, ..]
for all
elements.
sourcepub fn cmpge(self, other: DVec3) -> BVec3
pub fn cmpge(self, other: DVec3) -> BVec3
Returns a vector mask containing the result of a >=
comparison for each element of
self
and other
.
In other words this computes [self.x >= other.x, self.y >= other.y, ..]
for all
elements.
sourcepub fn cmpgt(self, other: DVec3) -> BVec3
pub fn cmpgt(self, other: DVec3) -> BVec3
Returns a vector mask containing the result of a >
comparison for each element of
self
and other
.
In other words this computes [self.x > other.x, self.y > other.y, ..]
for all
elements.
sourcepub fn cmple(self, other: DVec3) -> BVec3
pub fn cmple(self, other: DVec3) -> BVec3
Returns a vector mask containing the result of a <=
comparison for each element of
self
and other
.
In other words this computes [self.x <= other.x, self.y <= other.y, ..]
for all
elements.
sourcepub fn cmplt(self, other: DVec3) -> BVec3
pub fn cmplt(self, other: DVec3) -> BVec3
Returns a vector mask containing the result of a <
comparison for each element of
self
and other
.
In other words this computes [self.x < other.x, self.y < other.y, ..]
for all
elements.
sourcepub fn from_slice_unaligned(slice: &[f64]) -> DVec3
pub fn from_slice_unaligned(slice: &[f64]) -> DVec3
Creates a vector from the first N values in slice
.
Panics
Panics if slice
is less than N elements long.
sourcepub fn write_to_slice_unaligned(self, slice: &mut [f64])
pub fn write_to_slice_unaligned(self, slice: &mut [f64])
Writes the elements of self
to the first N elements in slice
.
Panics
Panics if slice
is less than N elements long.
sourcepub fn abs(self) -> DVec3
pub fn abs(self) -> DVec3
Returns a vector containing the absolute value of each element of self
.
sourcepub fn signum(self) -> DVec3
pub fn signum(self) -> DVec3
Returns a vector with elements representing the sign of self
.
1.0
if the number is positive,+0.0
orINFINITY
-1.0
if the number is negative,-0.0
orNEG_INFINITY
NAN
if the number isNAN
sourcepub fn is_finite(self) -> bool
pub fn is_finite(self) -> bool
Returns true
if, and only if, all elements are finite. If any element is either
NaN
, positive or negative infinity, this will return false
.
sourcepub fn is_nan_mask(self) -> BVec3
pub fn is_nan_mask(self) -> BVec3
Performs is_nan
on each element of self, returning a vector mask of the results.
In other words, this computes [x.is_nan(), y.is_nan(), z.is_nan(), w.is_nan()]
.
sourcepub fn length_squared(self) -> f64
pub fn length_squared(self) -> f64
Computes the squared length of self
.
This is faster than length()
as it avoids a square root operation.
sourcepub fn length_recip(self) -> f64
pub fn length_recip(self) -> f64
Computes 1.0 / length()
.
For valid results, self
must not be of length zero.
sourcepub fn distance(self, other: DVec3) -> f64
pub fn distance(self, other: DVec3) -> f64
Computes the Euclidean distance between two points in space.
sourcepub fn distance_squared(self, other: DVec3) -> f64
pub fn distance_squared(self, other: DVec3) -> f64
Compute the squared euclidean distance between two points in space.
sourcepub fn normalize(self) -> DVec3
pub fn normalize(self) -> DVec3
Returns self
normalized to length 1.0.
For valid results, self
must not be of length zero, nor very close to zero.
See also Self::try_normalize
and Self::normalize_or_zero
.
sourcepub fn try_normalize(self) -> Option<DVec3>
pub fn try_normalize(self) -> Option<DVec3>
Returns self
normalized to length 1.0 if possible, else returns None
.
In particular, if the input is zero (or very close to zero), or non-finite,
the result of this operation will be None
.
See also Self::normalize_or_zero
.
sourcepub fn normalize_or_zero(self) -> DVec3
pub fn normalize_or_zero(self) -> DVec3
Returns self
normalized to length 1.0 if possible, else returns zero.
In particular, if the input is zero (or very close to zero), or non-finite, the result of this operation will be zero.
See also Self::try_normalize
.
sourcepub fn is_normalized(self) -> bool
pub fn is_normalized(self) -> bool
Returns whether self
is length 1.0
or not.
Uses a precision threshold of 1e-6
.
sourcepub fn round(self) -> DVec3
pub fn round(self) -> DVec3
Returns a vector containing the nearest integer to a number for each element of self
.
Round half-way cases away from 0.0.
sourcepub fn floor(self) -> DVec3
pub fn floor(self) -> DVec3
Returns a vector containing the largest integer less than or equal to a number for each
element of self
.
sourcepub fn ceil(self) -> DVec3
pub fn ceil(self) -> DVec3
Returns a vector containing the smallest integer greater than or equal to a number for
each element of self
.
sourcepub fn exp(self) -> DVec3
pub fn exp(self) -> DVec3
Returns a vector containing e^self
(the exponential function) for each element of
self
.
sourcepub fn powf(self, n: f64) -> DVec3
pub fn powf(self, n: f64) -> DVec3
Returns a vector containing each element of self
raised to the power of n
.
sourcepub fn recip(self) -> DVec3
pub fn recip(self) -> DVec3
Returns a vector containing the reciprocal 1.0/n
of each element of self
.
sourcepub fn lerp(self, other: DVec3, s: f64) -> DVec3
pub fn lerp(self, other: DVec3, s: f64) -> DVec3
Performs a linear interpolation between self
and other
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 other
.
sourcepub fn abs_diff_eq(self, other: DVec3, max_abs_diff: f64) -> bool
pub fn abs_diff_eq(self, other: DVec3, max_abs_diff: f64) -> bool
Returns true if the absolute difference of all elements between self
and other
is
less than or equal to max_abs_diff
.
This can be used to compare if two vectors contain similar elements. It works best when
comparing with a known value. The max_abs_diff
that should be used used depends on
the values being compared against.
For more see comparing floating point numbers.
sourcepub fn clamp_length(self, min: f64, max: f64) -> DVec3
pub fn clamp_length(self, min: f64, max: f64) -> DVec3
Returns a vector with a length no less than min
and no more than max
sourcepub fn clamp_length_max(self, max: f64) -> DVec3
pub fn clamp_length_max(self, max: f64) -> DVec3
Returns a vector with a length no more than max
sourcepub fn clamp_length_min(self, min: f64) -> DVec3
pub fn clamp_length_min(self, min: f64) -> DVec3
Returns a vector with a length no less than min
sourcepub fn angle_between(self, other: DVec3) -> f64
pub fn angle_between(self, other: DVec3) -> f64
Returns the angle (in radians) between two vectors.
The input vectors do not need to be unit length however they must be non-zero.
sourcepub fn any_orthogonal_vector(&self) -> DVec3
pub fn any_orthogonal_vector(&self) -> DVec3
Returns somes vector that is orthogonal to the given one.
The input vector must be finite and non-zero.
The output vector is not necessarily unit-length.
For that use Self::any_orthonormal_vector
instead.
sourcepub fn any_orthonormal_vector(&self) -> DVec3
pub fn any_orthonormal_vector(&self) -> DVec3
Returns any unit-length vector that is orthogonal to the given one. The input vector must be finite and non-zero.
sourcepub fn any_orthonormal_pair(&self) -> (DVec3, DVec3)
pub fn any_orthonormal_pair(&self) -> (DVec3, DVec3)
Given a unit-length vector return two other vectors that together form an orthonormal basis. That is, all three vectors are orthogonal to each other and are normalized.
Trait Implementations
sourceimpl AddAssign<DVec3> for DVec3
impl AddAssign<DVec3> for DVec3
sourcefn add_assign(&mut self, other: DVec3)
fn add_assign(&mut self, other: DVec3)
Performs the +=
operation. Read more
sourceimpl DivAssign<DVec3> for DVec3
impl DivAssign<DVec3> for DVec3
sourcefn div_assign(&mut self, other: DVec3)
fn div_assign(&mut self, other: DVec3)
Performs the /=
operation. Read more
sourceimpl DivAssign<f64> for DVec3
impl DivAssign<f64> for DVec3
sourcefn div_assign(&mut self, other: f64)
fn div_assign(&mut self, other: f64)
Performs the /=
operation. Read more
sourceimpl MulAssign<DVec3> for DVec3
impl MulAssign<DVec3> for DVec3
sourcefn mul_assign(&mut self, other: DVec3)
fn mul_assign(&mut self, other: DVec3)
Performs the *=
operation. Read more
sourceimpl MulAssign<f64> for DVec3
impl MulAssign<f64> for DVec3
sourcefn mul_assign(&mut self, other: f64)
fn mul_assign(&mut self, other: f64)
Performs the *=
operation. Read more
sourceimpl PartialOrd<DVec3> for DVec3
impl PartialOrd<DVec3> for DVec3
sourcefn partial_cmp(&self, other: &DVec3) -> Option<Ordering>
fn partial_cmp(&self, other: &DVec3) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
sourceimpl SubAssign<DVec3> for DVec3
impl SubAssign<DVec3> for DVec3
sourcefn sub_assign(&mut self, other: DVec3)
fn sub_assign(&mut self, other: DVec3)
Performs the -=
operation. Read more
sourceimpl Vec3Swizzles for DVec3
impl Vec3Swizzles for DVec3
type Vec2 = DVec2
type Vec4 = DVec4
fn xxxx(self) -> DVec4
fn xxxy(self) -> DVec4
fn xxxz(self) -> DVec4
fn xxyx(self) -> DVec4
fn xxyy(self) -> DVec4
fn xxyz(self) -> DVec4
fn xxzx(self) -> DVec4
fn xxzy(self) -> DVec4
fn xxzz(self) -> DVec4
fn xyxx(self) -> DVec4
fn xyxy(self) -> DVec4
fn xyxz(self) -> DVec4
fn xyyx(self) -> DVec4
fn xyyy(self) -> DVec4
fn xyyz(self) -> DVec4
fn xyzx(self) -> DVec4
fn xyzy(self) -> DVec4
fn xyzz(self) -> DVec4
fn xzxx(self) -> DVec4
fn xzxy(self) -> DVec4
fn xzxz(self) -> DVec4
fn xzyx(self) -> DVec4
fn xzyy(self) -> DVec4
fn xzyz(self) -> DVec4
fn xzzx(self) -> DVec4
fn xzzy(self) -> DVec4
fn xzzz(self) -> DVec4
fn yxxx(self) -> DVec4
fn yxxy(self) -> DVec4
fn yxxz(self) -> DVec4
fn yxyx(self) -> DVec4
fn yxyy(self) -> DVec4
fn yxyz(self) -> DVec4
fn yxzx(self) -> DVec4
fn yxzy(self) -> DVec4
fn yxzz(self) -> DVec4
fn yyxx(self) -> DVec4
fn yyxy(self) -> DVec4
fn yyxz(self) -> DVec4
fn yyyx(self) -> DVec4
fn yyyy(self) -> DVec4
fn yyyz(self) -> DVec4
fn yyzx(self) -> DVec4
fn yyzy(self) -> DVec4
fn yyzz(self) -> DVec4
fn yzxx(self) -> DVec4
fn yzxy(self) -> DVec4
fn yzxz(self) -> DVec4
fn yzyx(self) -> DVec4
fn yzyy(self) -> DVec4
fn yzyz(self) -> DVec4
fn yzzx(self) -> DVec4
fn yzzy(self) -> DVec4
fn yzzz(self) -> DVec4
fn zxxx(self) -> DVec4
fn zxxy(self) -> DVec4
fn zxxz(self) -> DVec4
fn zxyx(self) -> DVec4
fn zxyy(self) -> DVec4
fn zxyz(self) -> DVec4
fn zxzx(self) -> DVec4
fn zxzy(self) -> DVec4
fn zxzz(self) -> DVec4
fn zyxx(self) -> DVec4
fn zyxy(self) -> DVec4
fn zyxz(self) -> DVec4
fn zyyx(self) -> DVec4
fn zyyy(self) -> DVec4
fn zyyz(self) -> DVec4
fn zyzx(self) -> DVec4
fn zyzy(self) -> DVec4
fn zyzz(self) -> DVec4
fn zzxx(self) -> DVec4
fn zzxy(self) -> DVec4
fn zzxz(self) -> DVec4
fn zzyx(self) -> DVec4
fn zzyy(self) -> DVec4
fn zzyz(self) -> DVec4
fn zzzx(self) -> DVec4
fn zzzy(self) -> DVec4
fn zzzz(self) -> DVec4
fn xxx(self) -> DVec3
fn xxy(self) -> DVec3
fn xxz(self) -> DVec3
fn xyx(self) -> DVec3
fn xyy(self) -> DVec3
fn xzx(self) -> DVec3
fn xzy(self) -> DVec3
fn xzz(self) -> DVec3
fn yxx(self) -> DVec3
fn yxy(self) -> DVec3
fn yxz(self) -> DVec3
fn yyx(self) -> DVec3
fn yyy(self) -> DVec3
fn yyz(self) -> DVec3
fn yzx(self) -> DVec3
fn yzy(self) -> DVec3
fn yzz(self) -> DVec3
fn zxx(self) -> DVec3
fn zxy(self) -> DVec3
fn zxz(self) -> DVec3
fn zyx(self) -> DVec3
fn zyy(self) -> DVec3
fn zyz(self) -> DVec3
fn zzx(self) -> DVec3
fn zzy(self) -> DVec3
fn zzz(self) -> DVec3
fn xx(self) -> DVec2
fn xy(self) -> DVec2
fn xz(self) -> DVec2
fn yx(self) -> DVec2
fn yy(self) -> DVec2
fn yz(self) -> DVec2
fn zx(self) -> DVec2
fn zy(self) -> DVec2
fn zz(self) -> DVec2
fn xyz(self) -> Self
impl Copy for DVec3
Auto Trait Implementations
impl RefUnwindSafe for DVec3
impl Send for DVec3
impl Sync for DVec3
impl Unpin for DVec3
impl UnwindSafe for DVec3
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more