#[repr(C)]pub struct Vector2<T> {
pub x: T,
pub y: T,
}
Expand description
Vector2.
Fields§
§x: T
The vector’s X component.
y: T
The vector’s Y component.
Implementations§
Source§impl<T: Neg<Output = T>> Vector2<T>
impl<T: Neg<Output = T>> Vector2<T>
Sourcepub fn orthogonal(self) -> Self
pub fn orthogonal(self) -> Self
Returns a perpendicular vector, rotated 90 degrees counter-clockwise, with the same length.
Source§impl<T: FloatAlone> Vector2<T>
impl<T: FloatAlone> Vector2<T>
Sourcepub fn from_angle(angle: T) -> Self
pub fn from_angle(angle: T) -> Self
Creates a unit Vector2
rotated to the given angle (radians).
This is equivalent to Vec2::new(angle.cos(), angle.sin())
.
assert_eq!(Vec2::from_angle(0.0), Vec2::RIGHT);
assert_eq!(Vec2::RIGHT.angle(), 0.0);
assert!(Vec2::from_angle(PI / 2.0).approx_eq(Vec2::new(0.0, 1.0)));
Sourcepub fn abs(self) -> Self
pub fn abs(self) -> Self
Returns a new vector with all components in absolute values (i.e. positive).
Sourcepub fn angle(&self) -> T
pub fn angle(&self) -> T
Returns this vector’s angle with respect to the positive X axis, or the Vec2::RIGHT
vector, in radians.
assert_eq!(Vec2::RIGHT.angle(), 0.0);
assert_eq!(Vec2::DOWN.angle(), PI / 2.0); // 90 degrees
assert_eq!(Vec2::new(1.0, -1.0).angle(), -PI / 4.0); // -45 degrees
Sourcepub fn distance_to(&self, to: &Self) -> T
pub fn distance_to(&self, to: &Self) -> T
Returns the distance from self
to to
.
Sourcepub fn length(&self) -> T
pub fn length(&self) -> T
Returns the length(magnitude) of self
.
assert_eq!(Vec2::splat(10.0).length(), 10.0 * 2.0f32.sqrt());
Sourcepub fn length_squared(&self) -> T
pub fn length_squared(&self) -> T
Returns the squared length of self
. Faster than Self::length
.
assert_eq!(Vec2::splat(10.0).length_squared(), 200.0);
Sourcepub fn limit_length(self, len: T) -> Self
pub fn limit_length(self, len: T) -> Self
Returns the vector with a new maximum length.
assert!(Vec2::splat(10.).limit_length(1.0).approx_eq(Vec2::splat(1.0 / 2.0f32.sqrt())));
assert!(Vec2::splat(10.).limit_length(5.0).approx_eq(Vec2::splat(1.0 / 2.0f32.sqrt() * 5.0)));
Sourcepub fn normalized(self) -> Self
pub fn normalized(self) -> Self
Returns the result of scaling the vector to unit length. Equivalent to v / v.length().
Note: This function may struggle with denormal values.
assert!(Vec2::RIGHT.normalized().approx_eq(Vec2::RIGHT));
assert!(Vec2::splat(1.0).normalized().approx_eq(Vec2::splat(0.5f32.sqrt())));
Sourcepub fn rotated(self, angle: T) -> Self
pub fn rotated(self, angle: T) -> Self
Rotates this vector by angle
radians.
let v = Vec2::new(1.2, 3.4);
assert!(v.rotated(TAU).approx_eq(Vec2::new(1.2, 3.4))); // full circle rotation
assert!(v.rotated(TAU / 4.0).approx_eq(Vec2::new(-3.4, 1.2)));
assert!(v.rotated(TAU / 3.0).approx_eq(Vec2::new(-3.5444863, -0.6607695)));
assert!(v.rotated(TAU / 2.0).approx_eq(v.rotated(TAU / -2.0)));
Trait Implementations§
Source§impl<T: Copy + add_assign<T>> AddAssign<&T> for Vector2<T>
impl<T: Copy + add_assign<T>> AddAssign<&T> for Vector2<T>
Source§fn add_assign(&mut self, rhs: &T)
fn add_assign(&mut self, rhs: &T)
+=
operation. Read moreSource§impl<T: Copy + add_assign<T>> AddAssign<&Vector2<T>> for Vector2<T>
impl<T: Copy + add_assign<T>> AddAssign<&Vector2<T>> for Vector2<T>
Source§fn add_assign(&mut self, rhs: &Vector2<T>)
fn add_assign(&mut self, rhs: &Vector2<T>)
+=
operation. Read moreSource§impl<T: Copy + add_assign<T>> AddAssign<T> for Vector2<T>
impl<T: Copy + add_assign<T>> AddAssign<T> for Vector2<T>
Source§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
+=
operation. Read moreSource§impl<T: add_assign<T>> AddAssign for Vector2<T>
impl<T: add_assign<T>> AddAssign for Vector2<T>
Source§fn add_assign(&mut self, rhs: Vector2<T>)
fn add_assign(&mut self, rhs: Vector2<T>)
+=
operation. Read moreSource§impl<T: Copy + div_assign<T>> DivAssign<&T> for Vector2<T>
impl<T: Copy + div_assign<T>> DivAssign<&T> for Vector2<T>
Source§fn div_assign(&mut self, rhs: &T)
fn div_assign(&mut self, rhs: &T)
/=
operation. Read moreSource§impl<T: Copy + div_assign<T>> DivAssign<&Vector2<T>> for Vector2<T>
impl<T: Copy + div_assign<T>> DivAssign<&Vector2<T>> for Vector2<T>
Source§fn div_assign(&mut self, rhs: &Vector2<T>)
fn div_assign(&mut self, rhs: &Vector2<T>)
/=
operation. Read moreSource§impl<T: Copy + div_assign<T>> DivAssign<T> for Vector2<T>
impl<T: Copy + div_assign<T>> DivAssign<T> for Vector2<T>
Source§fn div_assign(&mut self, rhs: T)
fn div_assign(&mut self, rhs: T)
/=
operation. Read moreSource§impl<T: div_assign<T>> DivAssign for Vector2<T>
impl<T: div_assign<T>> DivAssign for Vector2<T>
Source§fn div_assign(&mut self, rhs: Vector2<T>)
fn div_assign(&mut self, rhs: Vector2<T>)
/=
operation. Read moreSource§impl<T: Copy + mul_assign<T>> MulAssign<&T> for Vector2<T>
impl<T: Copy + mul_assign<T>> MulAssign<&T> for Vector2<T>
Source§fn mul_assign(&mut self, rhs: &T)
fn mul_assign(&mut self, rhs: &T)
*=
operation. Read moreSource§impl<T: Copy + mul_assign<T>> MulAssign<&Vector2<T>> for Vector2<T>
impl<T: Copy + mul_assign<T>> MulAssign<&Vector2<T>> for Vector2<T>
Source§fn mul_assign(&mut self, rhs: &Vector2<T>)
fn mul_assign(&mut self, rhs: &Vector2<T>)
*=
operation. Read moreSource§impl<T: Copy + mul_assign<T>> MulAssign<T> for Vector2<T>
impl<T: Copy + mul_assign<T>> MulAssign<T> for Vector2<T>
Source§fn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
*=
operation. Read moreSource§impl<T: mul_assign<T>> MulAssign for Vector2<T>
impl<T: mul_assign<T>> MulAssign for Vector2<T>
Source§fn mul_assign(&mut self, rhs: Vector2<T>)
fn mul_assign(&mut self, rhs: Vector2<T>)
*=
operation. Read moreSource§impl<T: Ord> Ord for Vector2<T>
impl<T: Ord> Ord for Vector2<T>
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl<T: PartialOrd> PartialOrd for Vector2<T>
impl<T: PartialOrd> PartialOrd for Vector2<T>
Source§impl<T: Copy + rem_assign<T>> RemAssign<&T> for Vector2<T>
impl<T: Copy + rem_assign<T>> RemAssign<&T> for Vector2<T>
Source§fn rem_assign(&mut self, rhs: &T)
fn rem_assign(&mut self, rhs: &T)
%=
operation. Read moreSource§impl<T: Copy + rem_assign<T>> RemAssign<&Vector2<T>> for Vector2<T>
impl<T: Copy + rem_assign<T>> RemAssign<&Vector2<T>> for Vector2<T>
Source§fn rem_assign(&mut self, rhs: &Vector2<T>)
fn rem_assign(&mut self, rhs: &Vector2<T>)
%=
operation. Read moreSource§impl<T: Copy + rem_assign<T>> RemAssign<T> for Vector2<T>
impl<T: Copy + rem_assign<T>> RemAssign<T> for Vector2<T>
Source§fn rem_assign(&mut self, rhs: T)
fn rem_assign(&mut self, rhs: T)
%=
operation. Read moreSource§impl<T: rem_assign<T>> RemAssign for Vector2<T>
impl<T: rem_assign<T>> RemAssign for Vector2<T>
Source§fn rem_assign(&mut self, rhs: Vector2<T>)
fn rem_assign(&mut self, rhs: Vector2<T>)
%=
operation. Read moreSource§impl<T: Copy + sub_assign<T>> SubAssign<&T> for Vector2<T>
impl<T: Copy + sub_assign<T>> SubAssign<&T> for Vector2<T>
Source§fn sub_assign(&mut self, rhs: &T)
fn sub_assign(&mut self, rhs: &T)
-=
operation. Read moreSource§impl<T: Copy + sub_assign<T>> SubAssign<&Vector2<T>> for Vector2<T>
impl<T: Copy + sub_assign<T>> SubAssign<&Vector2<T>> for Vector2<T>
Source§fn sub_assign(&mut self, rhs: &Vector2<T>)
fn sub_assign(&mut self, rhs: &Vector2<T>)
-=
operation. Read moreSource§impl<T: Copy + sub_assign<T>> SubAssign<T> for Vector2<T>
impl<T: Copy + sub_assign<T>> SubAssign<T> for Vector2<T>
Source§fn sub_assign(&mut self, rhs: T)
fn sub_assign(&mut self, rhs: T)
-=
operation. Read moreSource§impl<T: sub_assign<T>> SubAssign for Vector2<T>
impl<T: sub_assign<T>> SubAssign for Vector2<T>
Source§fn sub_assign(&mut self, rhs: Vector2<T>)
fn sub_assign(&mut self, rhs: Vector2<T>)
-=
operation. Read more