Struct lotus_script::math::f64::DVec4
source · #[repr(C)]pub struct DVec4 {
pub x: f64,
pub y: f64,
pub z: f64,
pub w: f64,
}Expand description
A 4-dimensional vector.
Fields§
§x: f64§y: f64§z: f64§w: f64Implementations§
source§impl DVec4
impl DVec4
sourcepub const NEG_INFINITY: DVec4 = _
pub const NEG_INFINITY: DVec4 = _
All f64::NEG_INFINITY.
sourcepub fn map<F>(self, f: F) -> DVec4
pub fn map<F>(self, f: F) -> DVec4
Returns a vector containing each element of self modified by a mapping function f.
sourcepub fn select(mask: BVec4, if_true: DVec4, if_false: DVec4) -> DVec4
pub fn select(mask: BVec4, if_true: DVec4, if_false: DVec4) -> DVec4
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 const fn from_array(a: [f64; 4]) -> DVec4
pub const fn from_array(a: [f64; 4]) -> DVec4
Creates a new vector from an array.
sourcepub const fn from_slice(slice: &[f64]) -> DVec4
pub const fn from_slice(slice: &[f64]) -> DVec4
Creates a vector from the first 4 values in slice.
§Panics
Panics if slice is less than 4 elements long.
sourcepub fn write_to_slice(self, slice: &mut [f64])
pub fn write_to_slice(self, slice: &mut [f64])
Writes the elements of self to the first 4 elements in slice.
§Panics
Panics if slice is less than 4 elements long.
sourcepub fn truncate(self) -> DVec3
pub fn truncate(self) -> DVec3
Creates a 3D vector from the x, y and z elements of self, discarding w.
Truncation to DVec3 may also be performed by using self.xyz().
sourcepub fn dot_into_vec(self, rhs: DVec4) -> DVec4
pub fn dot_into_vec(self, rhs: DVec4) -> DVec4
Returns a vector where every component is the dot product of self and rhs.
sourcepub fn min(self, rhs: DVec4) -> DVec4
pub fn min(self, rhs: DVec4) -> DVec4
Returns a vector containing the minimum values for each element of self and rhs.
In other words this computes [self.x.min(rhs.x), self.y.min(rhs.y), ..].
sourcepub fn max(self, rhs: DVec4) -> DVec4
pub fn max(self, rhs: DVec4) -> DVec4
Returns a vector containing the maximum values for each element of self and rhs.
In other words this computes [self.x.max(rhs.x), self.y.max(rhs.y), ..].
sourcepub fn clamp(self, min: DVec4, max: DVec4) -> DVec4
pub fn clamp(self, min: DVec4, max: DVec4) -> DVec4
Component-wise clamping of values, similar to f64::clamp.
Each element in min must be less-or-equal to the corresponding element in max.
§Panics
Will panic if min is greater than max when glam_assert is enabled.
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 element_sum(self) -> f64
pub fn element_sum(self) -> f64
Returns the sum of all elements of self.
In other words, this computes self.x + self.y + ...
sourcepub fn element_product(self) -> f64
pub fn element_product(self) -> f64
Returns the product of all elements of self.
In other words, this computes self.x * self.y * ...
sourcepub fn cmpeq(self, rhs: DVec4) -> BVec4
pub fn cmpeq(self, rhs: DVec4) -> BVec4
Returns a vector mask containing the result of a == comparison for each element of
self and rhs.
In other words, this computes [self.x == rhs.x, self.y == rhs.y, ..] for all
elements.
sourcepub fn cmpne(self, rhs: DVec4) -> BVec4
pub fn cmpne(self, rhs: DVec4) -> BVec4
Returns a vector mask containing the result of a != comparison for each element of
self and rhs.
In other words this computes [self.x != rhs.x, self.y != rhs.y, ..] for all
elements.
sourcepub fn cmpge(self, rhs: DVec4) -> BVec4
pub fn cmpge(self, rhs: DVec4) -> BVec4
Returns a vector mask containing the result of a >= comparison for each element of
self and rhs.
In other words this computes [self.x >= rhs.x, self.y >= rhs.y, ..] for all
elements.
sourcepub fn cmpgt(self, rhs: DVec4) -> BVec4
pub fn cmpgt(self, rhs: DVec4) -> BVec4
Returns a vector mask containing the result of a > comparison for each element of
self and rhs.
In other words this computes [self.x > rhs.x, self.y > rhs.y, ..] for all
elements.
sourcepub fn cmple(self, rhs: DVec4) -> BVec4
pub fn cmple(self, rhs: DVec4) -> BVec4
Returns a vector mask containing the result of a <= comparison for each element of
self and rhs.
In other words this computes [self.x <= rhs.x, self.y <= rhs.y, ..] for all
elements.
sourcepub fn cmplt(self, rhs: DVec4) -> BVec4
pub fn cmplt(self, rhs: DVec4) -> BVec4
Returns a vector mask containing the result of a < comparison for each element of
self and rhs.
In other words this computes [self.x < rhs.x, self.y < rhs.y, ..] for all
elements.
sourcepub fn abs(self) -> DVec4
pub fn abs(self) -> DVec4
Returns a vector containing the absolute value of each element of self.
sourcepub fn signum(self) -> DVec4
pub fn signum(self) -> DVec4
Returns a vector with elements representing the sign of self.
1.0if the number is positive,+0.0orINFINITY-1.0if the number is negative,-0.0orNEG_INFINITYNANif the number isNAN
sourcepub fn copysign(self, rhs: DVec4) -> DVec4
pub fn copysign(self, rhs: DVec4) -> DVec4
Returns a vector with signs of rhs and the magnitudes of self.
sourcepub fn is_negative_bitmask(self) -> u32
pub fn is_negative_bitmask(self) -> u32
Returns a bitmask with the lowest 4 bits set to the sign bits from the elements of self.
A negative element results in a 1 bit and a positive element in a 0 bit. Element x goes
into the first lowest bit, element y into the second, etc.
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_finite_mask(self) -> BVec4
pub fn is_finite_mask(self) -> BVec4
Performs is_finite on each element of self, returning a vector mask of the results.
In other words, this computes [x.is_finite(), y.is_finite(), ...].
sourcepub fn is_nan_mask(self) -> BVec4
pub fn is_nan_mask(self) -> BVec4
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(), ...].
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, rhs: DVec4) -> f64
pub fn distance(self, rhs: DVec4) -> f64
Computes the Euclidean distance between two points in space.
sourcepub fn distance_squared(self, rhs: DVec4) -> f64
pub fn distance_squared(self, rhs: DVec4) -> f64
Compute the squared euclidean distance between two points in space.
sourcepub fn div_euclid(self, rhs: DVec4) -> DVec4
pub fn div_euclid(self, rhs: DVec4) -> DVec4
Returns the element-wise quotient of [Euclidean division] of self by rhs.
sourcepub fn rem_euclid(self, rhs: DVec4) -> DVec4
pub fn rem_euclid(self, rhs: DVec4) -> DVec4
Returns the element-wise remainder of Euclidean division of self by rhs.
sourcepub fn normalize(self) -> DVec4
pub fn normalize(self) -> DVec4
Returns self normalized to length 1.0.
For valid results, self must be finite and not of length zero, nor very close to zero.
See also Self::try_normalize() and Self::normalize_or_zero().
Panics
Will panic if the resulting normalized vector is not finite when glam_assert is enabled.
sourcepub fn try_normalize(self) -> Option<DVec4>
pub fn try_normalize(self) -> Option<DVec4>
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(self, fallback: DVec4) -> DVec4
pub fn normalize_or(self, fallback: DVec4) -> DVec4
Returns self normalized to length 1.0 if possible, else returns a
fallback value.
In particular, if the input is zero (or very close to zero), or non-finite, the result of this operation will be the fallback value.
See also Self::try_normalize().
sourcepub fn normalize_or_zero(self) -> DVec4
pub fn normalize_or_zero(self) -> DVec4
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 approximately 1e-4.
sourcepub fn project_onto(self, rhs: DVec4) -> DVec4
pub fn project_onto(self, rhs: DVec4) -> DVec4
Returns the vector projection of self onto rhs.
rhs must be of non-zero length.
§Panics
Will panic if rhs is zero length when glam_assert is enabled.
sourcepub fn reject_from(self, rhs: DVec4) -> DVec4
pub fn reject_from(self, rhs: DVec4) -> DVec4
Returns the vector rejection of self from rhs.
The vector rejection is the vector perpendicular to the projection of self onto
rhs, in rhs words the result of self - self.project_onto(rhs).
rhs must be of non-zero length.
§Panics
Will panic if rhs has a length of zero when glam_assert is enabled.
sourcepub fn project_onto_normalized(self, rhs: DVec4) -> DVec4
pub fn project_onto_normalized(self, rhs: DVec4) -> DVec4
Returns the vector projection of self onto rhs.
rhs must be normalized.
§Panics
Will panic if rhs is not normalized when glam_assert is enabled.
sourcepub fn reject_from_normalized(self, rhs: DVec4) -> DVec4
pub fn reject_from_normalized(self, rhs: DVec4) -> DVec4
Returns the vector rejection of self from rhs.
The vector rejection is the vector perpendicular to the projection of self onto
rhs, in rhs words the result of self - self.project_onto(rhs).
rhs must be normalized.
§Panics
Will panic if rhs is not normalized when glam_assert is enabled.
sourcepub fn round(self) -> DVec4
pub fn round(self) -> DVec4
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) -> DVec4
pub fn floor(self) -> DVec4
Returns a vector containing the largest integer less than or equal to a number for each
element of self.
sourcepub fn ceil(self) -> DVec4
pub fn ceil(self) -> DVec4
Returns a vector containing the smallest integer greater than or equal to a number for
each element of self.
sourcepub fn trunc(self) -> DVec4
pub fn trunc(self) -> DVec4
Returns a vector containing the integer part each element of self. This means numbers are
always truncated towards zero.
sourcepub fn fract(self) -> DVec4
pub fn fract(self) -> DVec4
Returns a vector containing the fractional part of the vector as self - self.trunc().
Note that this differs from the GLSL implementation of fract which returns
self - self.floor().
Note that this is fast but not precise for large numbers.
sourcepub fn fract_gl(self) -> DVec4
pub fn fract_gl(self) -> DVec4
Returns a vector containing the fractional part of the vector as self - self.floor().
Note that this differs from the Rust implementation of fract which returns
self - self.trunc().
Note that this is fast but not precise for large numbers.
sourcepub fn exp(self) -> DVec4
pub fn exp(self) -> DVec4
Returns a vector containing e^self (the exponential function) for each element of
self.
sourcepub fn powf(self, n: f64) -> DVec4
pub fn powf(self, n: f64) -> DVec4
Returns a vector containing each element of self raised to the power of n.
sourcepub fn recip(self) -> DVec4
pub fn recip(self) -> DVec4
Returns a vector containing the reciprocal 1.0/n of each element of self.
sourcepub fn lerp(self, rhs: DVec4, s: f64) -> DVec4
pub fn lerp(self, rhs: DVec4, s: f64) -> DVec4
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. When s is outside of range [0, 1], the result is linearly
extrapolated.
sourcepub fn move_towards(&self, rhs: DVec4, d: f64) -> DVec4
pub fn move_towards(&self, rhs: DVec4, d: f64) -> DVec4
Moves towards rhs based on the value d.
When d is 0.0, the result will be equal to self. When d is equal to
self.distance(rhs), the result will be equal to rhs. Will not go past rhs.
sourcepub fn midpoint(self, rhs: DVec4) -> DVec4
pub fn midpoint(self, rhs: DVec4) -> DVec4
Calculates the midpoint between self and rhs.
The midpoint is the average of, or halfway point between, two vectors.
a.midpoint(b) should yield the same result as a.lerp(b, 0.5)
while being slightly cheaper to compute.
sourcepub fn abs_diff_eq(self, rhs: DVec4, max_abs_diff: f64) -> bool
pub fn abs_diff_eq(self, rhs: DVec4, max_abs_diff: f64) -> bool
Returns true if the absolute difference of all elements between self and rhs 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) -> DVec4
pub fn clamp_length(self, min: f64, max: f64) -> DVec4
Returns a vector with a length no less than min and no more than max.
§Panics
Will panic if min is greater than max, or if either min or max is negative, when glam_assert is enabled.
sourcepub fn clamp_length_max(self, max: f64) -> DVec4
pub fn clamp_length_max(self, max: f64) -> DVec4
Returns a vector with a length no more than max.
§Panics
Will panic if max is negative when glam_assert is enabled.
sourcepub fn clamp_length_min(self, min: f64) -> DVec4
pub fn clamp_length_min(self, min: f64) -> DVec4
Returns a vector with a length no less than min.
§Panics
Will panic if min is negative when glam_assert is enabled.
sourcepub fn mul_add(self, a: DVec4, b: DVec4) -> DVec4
pub fn mul_add(self, a: DVec4, b: DVec4) -> DVec4
Fused multiply-add. Computes (self * a) + b element-wise with only one rounding
error, yielding a more accurate result than an unfused multiply-add.
Using mul_add may be more performant than an unfused multiply-add if the target
architecture has a dedicated fma CPU instruction. However, this is not always true,
and will be heavily dependant on designing algorithms with specific target hardware in
mind.
sourcepub fn reflect(self, normal: DVec4) -> DVec4
pub fn reflect(self, normal: DVec4) -> DVec4
Returns the reflection vector for a given incident vector self and surface normal
normal.
normal must be normalized.
§Panics
Will panic if normal is not normalized when glam_assert is enabled.
sourcepub fn refract(self, normal: DVec4, eta: f64) -> DVec4
pub fn refract(self, normal: DVec4, eta: f64) -> DVec4
Returns the refraction direction for a given incident vector self, surface normal
normal and ratio of indices of refraction, eta. When total internal reflection occurs,
a zero vector will be returned.
self and normal must be normalized.
§Panics
Will panic if self or normal is not normalized when glam_assert is enabled.
sourcepub fn as_i16vec4(&self) -> I16Vec4
pub fn as_i16vec4(&self) -> I16Vec4
Casts all elements of self to i16.
sourcepub fn as_u16vec4(&self) -> U16Vec4
pub fn as_u16vec4(&self) -> U16Vec4
Casts all elements of self to u16.
sourcepub fn as_i64vec4(&self) -> I64Vec4
pub fn as_i64vec4(&self) -> I64Vec4
Casts all elements of self to i64.
sourcepub fn as_u64vec4(&self) -> U64Vec4
pub fn as_u64vec4(&self) -> U64Vec4
Casts all elements of self to u64.
Trait Implementations§
source§impl AddAssign<&DVec4> for DVec4
impl AddAssign<&DVec4> for DVec4
source§fn add_assign(&mut self, rhs: &DVec4)
fn add_assign(&mut self, rhs: &DVec4)
+= operation. Read moresource§impl AddAssign<&f64> for DVec4
impl AddAssign<&f64> for DVec4
source§fn add_assign(&mut self, rhs: &f64)
fn add_assign(&mut self, rhs: &f64)
+= operation. Read moresource§impl AddAssign<f64> for DVec4
impl AddAssign<f64> for DVec4
source§fn add_assign(&mut self, rhs: f64)
fn add_assign(&mut self, rhs: f64)
+= operation. Read moresource§impl AddAssign for DVec4
impl AddAssign for DVec4
source§fn add_assign(&mut self, rhs: DVec4)
fn add_assign(&mut self, rhs: DVec4)
+= operation. Read moresource§impl<'de> Deserialize<'de> for DVec4
impl<'de> Deserialize<'de> for DVec4
Deserialize expects a sequence of 4 values.
source§fn deserialize<D>(
deserializer: D
) -> Result<DVec4, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D
) -> Result<DVec4, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
source§impl DivAssign<&DVec4> for DVec4
impl DivAssign<&DVec4> for DVec4
source§fn div_assign(&mut self, rhs: &DVec4)
fn div_assign(&mut self, rhs: &DVec4)
/= operation. Read moresource§impl DivAssign<&f64> for DVec4
impl DivAssign<&f64> for DVec4
source§fn div_assign(&mut self, rhs: &f64)
fn div_assign(&mut self, rhs: &f64)
/= operation. Read moresource§impl DivAssign<f64> for DVec4
impl DivAssign<f64> for DVec4
source§fn div_assign(&mut self, rhs: f64)
fn div_assign(&mut self, rhs: f64)
/= operation. Read moresource§impl DivAssign for DVec4
impl DivAssign for DVec4
source§fn div_assign(&mut self, rhs: DVec4)
fn div_assign(&mut self, rhs: DVec4)
/= operation. Read moresource§impl MulAssign<&DVec4> for DVec4
impl MulAssign<&DVec4> for DVec4
source§fn mul_assign(&mut self, rhs: &DVec4)
fn mul_assign(&mut self, rhs: &DVec4)
*= operation. Read moresource§impl MulAssign<&f64> for DVec4
impl MulAssign<&f64> for DVec4
source§fn mul_assign(&mut self, rhs: &f64)
fn mul_assign(&mut self, rhs: &f64)
*= operation. Read moresource§impl MulAssign<f64> for DVec4
impl MulAssign<f64> for DVec4
source§fn mul_assign(&mut self, rhs: f64)
fn mul_assign(&mut self, rhs: f64)
*= operation. Read moresource§impl MulAssign for DVec4
impl MulAssign for DVec4
source§fn mul_assign(&mut self, rhs: DVec4)
fn mul_assign(&mut self, rhs: DVec4)
*= operation. Read moresource§impl PartialEq for DVec4
impl PartialEq for DVec4
source§impl RemAssign<&DVec4> for DVec4
impl RemAssign<&DVec4> for DVec4
source§fn rem_assign(&mut self, rhs: &DVec4)
fn rem_assign(&mut self, rhs: &DVec4)
%= operation. Read moresource§impl RemAssign<&f64> for DVec4
impl RemAssign<&f64> for DVec4
source§fn rem_assign(&mut self, rhs: &f64)
fn rem_assign(&mut self, rhs: &f64)
%= operation. Read moresource§impl RemAssign<f64> for DVec4
impl RemAssign<f64> for DVec4
source§fn rem_assign(&mut self, rhs: f64)
fn rem_assign(&mut self, rhs: f64)
%= operation. Read moresource§impl RemAssign for DVec4
impl RemAssign for DVec4
source§fn rem_assign(&mut self, rhs: DVec4)
fn rem_assign(&mut self, rhs: DVec4)
%= operation. Read moresource§impl Serialize for DVec4
impl Serialize for DVec4
Serialize as a sequence of 4 values.
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 SubAssign<&DVec4> for DVec4
impl SubAssign<&DVec4> for DVec4
source§fn sub_assign(&mut self, rhs: &DVec4)
fn sub_assign(&mut self, rhs: &DVec4)
-= operation. Read moresource§impl SubAssign<&f64> for DVec4
impl SubAssign<&f64> for DVec4
source§fn sub_assign(&mut self, rhs: &f64)
fn sub_assign(&mut self, rhs: &f64)
-= operation. Read moresource§impl SubAssign<f64> for DVec4
impl SubAssign<f64> for DVec4
source§fn sub_assign(&mut self, rhs: f64)
fn sub_assign(&mut self, rhs: f64)
-= operation. Read moresource§impl SubAssign for DVec4
impl SubAssign for DVec4
source§fn sub_assign(&mut self, rhs: DVec4)
fn sub_assign(&mut self, rhs: DVec4)
-= operation. Read more