pub trait GenericVector2:
HasXY
+ Approx
+ PartialEq
+ AddAssign
+ SubAssign
+ Neg<Output = Self>
+ Sub<Self, Output = Self>
+ Mul<Self::Scalar, Output = Self>
+ Div<Self::Scalar, Output = Self>
+ Add<Self, Output = Self> {
type Vector3: GenericVector3<Scalar = Self::Scalar, Vector2 = Self>;
type Affine: Affine2D<Vector2 = Self>;
type Aabb: Aabb2<Vector = Self> + Into<Vec<Self>>;
Show 15 methods
// Required methods
fn new(x: Self::Scalar, y: Self::Scalar) -> Self;
fn splat(value: Self::Scalar) -> Self;
fn to_3d(self, z: Self::Scalar) -> Self::Vector3;
fn magnitude(self) -> Self::Scalar;
fn magnitude_sq(self) -> Self::Scalar;
fn dot(self, other: Self) -> Self::Scalar;
fn perp_dot(self, rhs: Self) -> Self::Scalar;
fn distance(self, rhs: Self) -> Self::Scalar;
fn distance_sq(self, rhs: Self) -> Self::Scalar;
fn normalize(self) -> Self;
fn try_normalize(self, epsilon: Self::Scalar) -> Option<Self>;
fn min(self, rhs: Self) -> Self;
fn max(self, rhs: Self) -> Self;
fn clamp(self, min: Self, max: Self) -> Self;
fn is_finite(self) -> bool;
}
Expand description
A generic two-dimensional vector trait.
The GenericVector2
trait abstracts over two-dimensional vectors, allowing for easy
transition between different precisions (e.g., f32
and f64
) without necessitating
significant codebase modifications. It provides the common operations one would expect
for 2D vectors, such as dot products, cross products, and normalization.
Implementors of this trait can benefit from the ability to switch between different precision representations seamlessly, making it ideal for applications where varying precision levels might be desirable at different stages or configurations.
The associated Scalar
type represents the scalar type (e.g., f32
or f64
) used
by the vector, and Vector3
is the corresponding three-dimensional vector type.
Note: The actual trait functionality might vary based on the concrete implementations.
Required Associated Types§
type Vector3: GenericVector3<Scalar = Self::Scalar, Vector2 = Self>
type Affine: Affine2D<Vector2 = Self>
type Aabb: Aabb2<Vector = Self> + Into<Vec<Self>>
Required Methods§
fn new(x: Self::Scalar, y: Self::Scalar) -> Self
fn splat(value: Self::Scalar) -> Self
fn to_3d(self, z: Self::Scalar) -> Self::Vector3
fn magnitude(self) -> Self::Scalar
fn magnitude_sq(self) -> Self::Scalar
fn dot(self, other: Self) -> Self::Scalar
fn perp_dot(self, rhs: Self) -> Self::Scalar
fn distance(self, rhs: Self) -> Self::Scalar
fn distance_sq(self, rhs: Self) -> Self::Scalar
fn normalize(self) -> Self
fn try_normalize(self, epsilon: Self::Scalar) -> Option<Self>
fn min(self, rhs: Self) -> Self
fn max(self, rhs: Self) -> Self
Sourcefn clamp(self, min: Self, max: Self) -> Self
fn clamp(self, min: Self, max: Self) -> Self
Clamps the vector’s components to be within the range defined by min
and max
.
§Note
This implementation does not follow nalgebra
’s convention for clamp
.
In nalgebra
, clamp
is symmetric around zero.
In this implementation, clamp
ensures that self
is bounded by min
and max
in a non-symmetric way: self.min(max).max(min)
.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.