#[repr(C)]pub struct Vec2 {
pub x: f32,
pub y: f32,
}
Expand description
A vector has a direction and length.
A Vec2
is often used to represent a size.
emath represents positions using crate::Pos2
.
Normally the units are points (logical pixels).
Fields§
§x: f32
Rightwards. Width.
y: f32
Downwards. Height.
Implementations§
source§impl Vec2
impl Vec2
pub const ZERO: Self = _
pub const INFINITY: Self = _
pub const NAN: Self = _
pub const fn new(x: f32, y: f32) -> Self
sourcepub fn to_pos2(self) -> Pos2
pub fn to_pos2(self) -> Pos2
Treat this vector as a position.
v.to_pos2()
is equivalent to Pos2::default() + v
.
sourcepub fn normalized(self) -> Self
pub fn normalized(self) -> Self
Safe normalize: returns zero if input is zero.
sourcepub fn is_normalized(self) -> bool
pub fn is_normalized(self) -> bool
Checks if self
has length 1.0
up to a precision of 1e-6
.
sourcepub fn rot90(self) -> Self
pub fn rot90(self) -> Self
Rotates the vector by 90°, i.e positive X to positive Y (clockwise in egui coordinates).
pub fn length(self) -> f32
pub fn length_sq(self) -> f32
sourcepub fn angle(self) -> f32
pub fn angle(self) -> f32
Measures the angle of the vector.
use std::f32::consts::TAU;
assert_eq!(Vec2::ZERO.angle(), 0.0);
assert_eq!(Vec2::angled(0.0).angle(), 0.0);
assert_eq!(Vec2::angled(1.0).angle(), 1.0);
assert_eq!(Vec2::X.angle(), 0.0);
assert_eq!(Vec2::Y.angle(), 0.25 * TAU);
assert_eq!(Vec2::RIGHT.angle(), 0.0);
assert_eq!(Vec2::DOWN.angle(), 0.25 * TAU);
assert_eq!(Vec2::UP.angle(), -0.25 * TAU);
sourcepub fn angled(angle: f32) -> Self
pub fn angled(angle: f32) -> Self
Create a unit vector with the given CW angle (in radians).
- An angle of zero gives the unit X axis.
- An angle of 𝞃/4 = 90° gives the unit Y axis.
use std::f32::consts::TAU;
assert_eq!(Vec2::angled(0.0), Vec2::X);
assert!((Vec2::angled(0.25 * TAU) - Vec2::Y).length() < 1e-5);
pub fn floor(self) -> Self
pub fn round(self) -> Self
pub fn ceil(self) -> Self
pub fn abs(self) -> Self
pub fn min(self, other: Self) -> Self
pub fn max(self, other: Self) -> Self
pub fn clamp(self, min: Self, max: Self) -> Self
Trait Implementations§
source§impl AddAssign<Vec2> for Pos2
impl AddAssign<Vec2> for Pos2
source§fn add_assign(&mut self, rhs: Vec2)
fn add_assign(&mut self, rhs: Vec2)
Performs the
+=
operation. Read moresource§impl AddAssign for Vec2
impl AddAssign for Vec2
source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the
+=
operation. Read moresource§impl DivAssign<f32> for Vec2
impl DivAssign<f32> for Vec2
source§fn div_assign(&mut self, rhs: f32)
fn div_assign(&mut self, rhs: f32)
Performs the
/=
operation. Read moresource§impl MulAssign<f32> for Vec2
impl MulAssign<f32> for Vec2
source§fn mul_assign(&mut self, rhs: f32)
fn mul_assign(&mut self, rhs: f32)
Performs the
*=
operation. Read moresource§impl SubAssign<Vec2> for Pos2
impl SubAssign<Vec2> for Pos2
source§fn sub_assign(&mut self, rhs: Vec2)
fn sub_assign(&mut self, rhs: Vec2)
Performs the
-=
operation. Read moresource§impl SubAssign for Vec2
impl SubAssign for Vec2
source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
Performs the
-=
operation. Read moreimpl Copy for Vec2
impl Eq for Vec2
impl Pod for Vec2
impl StructuralPartialEq for Vec2
Auto Trait Implementations§
impl Freeze for Vec2
impl RefUnwindSafe for Vec2
impl Send for Vec2
impl Sync for Vec2
impl Unpin for Vec2
impl UnwindSafe for Vec2
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
source§type Bits = T
type Bits = T
Self
must have the same layout as the specified Bits
except for
the possible invalid bit patterns being checked during
is_valid_bit_pattern
.source§fn is_valid_bit_pattern(_bits: &T) -> bool
fn is_valid_bit_pattern(_bits: &T) -> bool
If this function returns true, then it must be valid to reinterpret
bits
as &Self
.source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)