#[repr(transparent)]pub struct Vec3(_);
Expand description
A 3-dimensional vector without SIMD support.
Implementations
sourceimpl Vec3
impl Vec3
sourcepub const X: Vec3 = Self(Vector3Const::X)
pub const X: Vec3 = Self(Vector3Const::X)
[1, 0, 0]
: a unit-length vector pointing along the positive X axis.
sourcepub const Y: Vec3 = Self(Vector3Const::Y)
pub const Y: Vec3 = Self(Vector3Const::Y)
[0, 1, 0]
: a unit-length vector pointing along the positive Y axis.
sourcepub const Z: Vec3 = Self(Vector3Const::Z)
pub const Z: Vec3 = Self(Vector3Const::Z)
[0, 0, 1]
: a unit-length vector pointing along the positive Z axis.
sourcepub const fn unit_x() -> Vec3
👎 Deprecated: Use Vec3::X instead
pub const fn unit_x() -> Vec3
Use Vec3::X instead
Creates a vector with values [x: 1.0, y: 0.0, z: 0.0]
.
sourcepub const fn unit_y() -> Vec3
👎 Deprecated: Use Vec3::Y instead
pub const fn unit_y() -> Vec3
Use Vec3::Y instead
Creates a vector with values [x: 0.0, y: 1.0, z: 0.0]
.
sourcepub const fn unit_z() -> Vec3
👎 Deprecated: Use Vec3::Z instead
pub const fn unit_z() -> Vec3
Use Vec3::Z instead
Creates a vector with values [x: 0.0, y: 0.0, z: 1.0]
.
sourcepub fn truncate(self) -> Vec2
pub fn truncate(self) -> Vec2
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() -> Vec3
👎 Deprecated: use ZERO constant instead
pub const fn zero() -> Vec3
use ZERO constant instead
Creates a vector with all elements set to 0.0
.
sourcepub const fn one() -> Vec3
👎 Deprecated: use ONE constant instead
pub const fn one() -> Vec3
use ONE constant instead
Creates a vector with all elements set to 1.0
.
sourcepub fn select(mask: BVec3, if_true: Vec3, if_false: Vec3) -> Vec3
pub fn select(mask: BVec3, if_true: Vec3, if_false: Vec3) -> Vec3
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: Vec3) -> Vec3
pub fn min(self, other: Vec3) -> Vec3
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: Vec3) -> Vec3
pub fn max(self, other: Vec3) -> Vec3
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: Vec3, max: Vec3) -> Vec3
pub fn clamp(self, min: Vec3, max: Vec3) -> Vec3
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) -> f32
pub fn min_element(self) -> f32
Returns the horizontal minimum of self
.
In other words this computes min(x, y, ..)
.
sourcepub fn max_element(self) -> f32
pub fn max_element(self) -> f32
Returns the horizontal maximum of self
.
In other words this computes max(x, y, ..)
.
sourcepub fn cmpeq(self, other: Vec3) -> BVec3
pub fn cmpeq(self, other: Vec3) -> 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: Vec3) -> BVec3
pub fn cmpne(self, other: Vec3) -> 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: Vec3) -> BVec3
pub fn cmpge(self, other: Vec3) -> 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: Vec3) -> BVec3
pub fn cmpgt(self, other: Vec3) -> 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: Vec3) -> BVec3
pub fn cmple(self, other: Vec3) -> 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: Vec3) -> BVec3
pub fn cmplt(self, other: Vec3) -> 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: &[f32]) -> Vec3
pub fn from_slice_unaligned(slice: &[f32]) -> Vec3
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 [f32])
pub fn write_to_slice_unaligned(self, slice: &mut [f32])
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) -> Vec3
pub fn abs(self) -> Vec3
Returns a vector containing the absolute value of each element of self
.
sourcepub fn signum(self) -> Vec3
pub fn signum(self) -> Vec3
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) -> f32
pub fn length_squared(self) -> f32
Computes the squared length of self
.
This is faster than length()
as it avoids a square root operation.
sourcepub fn length_recip(self) -> f32
pub fn length_recip(self) -> f32
Computes 1.0 / length()
.
For valid results, self
must not be of length zero.
sourcepub fn distance(self, other: Vec3) -> f32
pub fn distance(self, other: Vec3) -> f32
Computes the Euclidean distance between two points in space.
sourcepub fn distance_squared(self, other: Vec3) -> f32
pub fn distance_squared(self, other: Vec3) -> f32
Compute the squared euclidean distance between two points in space.
sourcepub fn normalize(self) -> Vec3
pub fn normalize(self) -> Vec3
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<Vec3>
pub fn try_normalize(self) -> Option<Vec3>
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) -> Vec3
pub fn normalize_or_zero(self) -> Vec3
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) -> Vec3
pub fn round(self) -> Vec3
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) -> Vec3
pub fn floor(self) -> Vec3
Returns a vector containing the largest integer less than or equal to a number for each
element of self
.
sourcepub fn ceil(self) -> Vec3
pub fn ceil(self) -> Vec3
Returns a vector containing the smallest integer greater than or equal to a number for
each element of self
.
sourcepub fn exp(self) -> Vec3
pub fn exp(self) -> Vec3
Returns a vector containing e^self
(the exponential function) for each element of
self
.
sourcepub fn powf(self, n: f32) -> Vec3
pub fn powf(self, n: f32) -> Vec3
Returns a vector containing each element of self
raised to the power of n
.
sourcepub fn recip(self) -> Vec3
pub fn recip(self) -> Vec3
Returns a vector containing the reciprocal 1.0/n
of each element of self
.
sourcepub fn lerp(self, other: Vec3, s: f32) -> Vec3
pub fn lerp(self, other: Vec3, s: f32) -> Vec3
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: Vec3, max_abs_diff: f32) -> bool
pub fn abs_diff_eq(self, other: Vec3, max_abs_diff: f32) -> 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: f32, max: f32) -> Vec3
pub fn clamp_length(self, min: f32, max: f32) -> Vec3
Returns a vector with a length no less than min
and no more than max
sourcepub fn clamp_length_max(self, max: f32) -> Vec3
pub fn clamp_length_max(self, max: f32) -> Vec3
Returns a vector with a length no more than max
sourcepub fn clamp_length_min(self, min: f32) -> Vec3
pub fn clamp_length_min(self, min: f32) -> Vec3
Returns a vector with a length no less than min
sourcepub fn angle_between(self, other: Vec3) -> f32
pub fn angle_between(self, other: Vec3) -> f32
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) -> Vec3
pub fn any_orthogonal_vector(&self) -> Vec3
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) -> Vec3
pub fn any_orthonormal_vector(&self) -> Vec3
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) -> (Vec3, Vec3)
pub fn any_orthonormal_pair(&self) -> (Vec3, Vec3)
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<Vec3> for Vec3
impl AddAssign<Vec3> for Vec3
sourcefn add_assign(&mut self, other: Vec3)
fn add_assign(&mut self, other: Vec3)
Performs the +=
operation. Read more
sourceimpl DivAssign<Vec3> for Vec3
impl DivAssign<Vec3> for Vec3
sourcefn div_assign(&mut self, other: Vec3)
fn div_assign(&mut self, other: Vec3)
Performs the /=
operation. Read more
sourceimpl DivAssign<f32> for Vec3
impl DivAssign<f32> for Vec3
sourcefn div_assign(&mut self, other: f32)
fn div_assign(&mut self, other: f32)
Performs the /=
operation. Read more
sourceimpl MulAssign<Vec3> for Vec3
impl MulAssign<Vec3> for Vec3
sourcefn mul_assign(&mut self, other: Vec3)
fn mul_assign(&mut self, other: Vec3)
Performs the *=
operation. Read more
sourceimpl MulAssign<f32> for Vec3
impl MulAssign<f32> for Vec3
sourcefn mul_assign(&mut self, other: f32)
fn mul_assign(&mut self, other: f32)
Performs the *=
operation. Read more
sourceimpl PartialOrd<Vec3> for Vec3
impl PartialOrd<Vec3> for Vec3
sourcefn partial_cmp(&self, other: &Vec3) -> Option<Ordering>
fn partial_cmp(&self, other: &Vec3) -> 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<Vec3> for Vec3
impl SubAssign<Vec3> for Vec3
sourcefn sub_assign(&mut self, other: Vec3)
fn sub_assign(&mut self, other: Vec3)
Performs the -=
operation. Read more
sourceimpl Vec3Swizzles for Vec3
impl Vec3Swizzles for Vec3
type Vec2 = Vec2
type Vec4 = Vec4
fn xxxx(self) -> Vec4
fn xxxy(self) -> Vec4
fn xxxz(self) -> Vec4
fn xxyx(self) -> Vec4
fn xxyy(self) -> Vec4
fn xxyz(self) -> Vec4
fn xxzx(self) -> Vec4
fn xxzy(self) -> Vec4
fn xxzz(self) -> Vec4
fn xyxx(self) -> Vec4
fn xyxy(self) -> Vec4
fn xyxz(self) -> Vec4
fn xyyx(self) -> Vec4
fn xyyy(self) -> Vec4
fn xyyz(self) -> Vec4
fn xyzx(self) -> Vec4
fn xyzy(self) -> Vec4
fn xyzz(self) -> Vec4
fn xzxx(self) -> Vec4
fn xzxy(self) -> Vec4
fn xzxz(self) -> Vec4
fn xzyx(self) -> Vec4
fn xzyy(self) -> Vec4
fn xzyz(self) -> Vec4
fn xzzx(self) -> Vec4
fn xzzy(self) -> Vec4
fn xzzz(self) -> Vec4
fn yxxx(self) -> Vec4
fn yxxy(self) -> Vec4
fn yxxz(self) -> Vec4
fn yxyx(self) -> Vec4
fn yxyy(self) -> Vec4
fn yxyz(self) -> Vec4
fn yxzx(self) -> Vec4
fn yxzy(self) -> Vec4
fn yxzz(self) -> Vec4
fn yyxx(self) -> Vec4
fn yyxy(self) -> Vec4
fn yyxz(self) -> Vec4
fn yyyx(self) -> Vec4
fn yyyy(self) -> Vec4
fn yyyz(self) -> Vec4
fn yyzx(self) -> Vec4
fn yyzy(self) -> Vec4
fn yyzz(self) -> Vec4
fn yzxx(self) -> Vec4
fn yzxy(self) -> Vec4
fn yzxz(self) -> Vec4
fn yzyx(self) -> Vec4
fn yzyy(self) -> Vec4
fn yzyz(self) -> Vec4
fn yzzx(self) -> Vec4
fn yzzy(self) -> Vec4
fn yzzz(self) -> Vec4
fn zxxx(self) -> Vec4
fn zxxy(self) -> Vec4
fn zxxz(self) -> Vec4
fn zxyx(self) -> Vec4
fn zxyy(self) -> Vec4
fn zxyz(self) -> Vec4
fn zxzx(self) -> Vec4
fn zxzy(self) -> Vec4
fn zxzz(self) -> Vec4
fn zyxx(self) -> Vec4
fn zyxy(self) -> Vec4
fn zyxz(self) -> Vec4
fn zyyx(self) -> Vec4
fn zyyy(self) -> Vec4
fn zyyz(self) -> Vec4
fn zyzx(self) -> Vec4
fn zyzy(self) -> Vec4
fn zyzz(self) -> Vec4
fn zzxx(self) -> Vec4
fn zzxy(self) -> Vec4
fn zzxz(self) -> Vec4
fn zzyx(self) -> Vec4
fn zzyy(self) -> Vec4
fn zzyz(self) -> Vec4
fn zzzx(self) -> Vec4
fn zzzy(self) -> Vec4
fn zzzz(self) -> Vec4
fn xxx(self) -> Vec3
fn xxy(self) -> Vec3
fn xxz(self) -> Vec3
fn xyx(self) -> Vec3
fn xyy(self) -> Vec3
fn xzx(self) -> Vec3
fn xzy(self) -> Vec3
fn xzz(self) -> Vec3
fn yxx(self) -> Vec3
fn yxy(self) -> Vec3
fn yxz(self) -> Vec3
fn yyx(self) -> Vec3
fn yyy(self) -> Vec3
fn yyz(self) -> Vec3
fn yzx(self) -> Vec3
fn yzy(self) -> Vec3
fn yzz(self) -> Vec3
fn zxx(self) -> Vec3
fn zxy(self) -> Vec3
fn zxz(self) -> Vec3
fn zyx(self) -> Vec3
fn zyy(self) -> Vec3
fn zyz(self) -> Vec3
fn zzx(self) -> Vec3
fn zzy(self) -> Vec3
fn zzz(self) -> Vec3
fn xx(self) -> Vec2
fn xy(self) -> Vec2
fn xz(self) -> Vec2
fn yx(self) -> Vec2
fn yy(self) -> Vec2
fn yz(self) -> Vec2
fn zx(self) -> Vec2
fn zy(self) -> Vec2
fn zz(self) -> Vec2
fn xyz(self) -> Self
impl Copy for Vec3
Auto Trait Implementations
impl RefUnwindSafe for Vec3
impl Send for Vec3
impl Sync for Vec3
impl Unpin for Vec3
impl UnwindSafe for Vec3
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