Struct Vec2

Source
pub struct Vec2 {
    pub x: f64,
    pub y: f64,
}
Expand description

A 2D vector.

This is intended primarily for a vector in the mathematical sense, but it can be interpreted as a translation, and converted to and from a Point (vector relative to the origin) and Size.

Fields§

§x: f64

The x-coordinate.

§y: f64

The y-coordinate.

Implementations§

Source§

impl Vec2

Source

pub const ZERO: Vec2

The vector (0, 0).

Source

pub const fn new(x: f64, y: f64) -> Vec2

Create a new vector.

Source

pub const fn to_point(self) -> Point

Convert this vector into a Point.

Source

pub const fn to_size(self) -> Size

Convert this vector into a Size.

Source

pub const fn splat(v: f64) -> Self

Create a vector with the same value for x and y.

Source

pub fn dot(self, other: Vec2) -> f64

Dot product of two vectors.

Source

pub fn cross(self, other: Vec2) -> f64

Cross product of two vectors.

This is signed so that (1, 0) × (0, 1) = 1.

The following relations hold:

u.cross(v) = -v.cross(u)

v.cross(v) = 0.0

Source

pub fn hypot(self) -> f64

Magnitude of vector.

See Point::distance for the same operation on Point.

§Examples
use kurbo::Vec2;
let v = Vec2::new(3.0, 4.0);
assert_eq!(v.hypot(), 5.0);
Source

pub fn length(self) -> f64

Magnitude of vector.

This is an alias for Vec2::hypot.

Source

pub fn hypot2(self) -> f64

Magnitude squared of vector.

See Point::distance_squared for the same operation on Point.

§Examples
use kurbo::Vec2;
let v = Vec2::new(3.0, 4.0);
assert_eq!(v.hypot2(), 25.0);
Source

pub fn length_squared(self) -> f64

Magnitude squared of vector.

This is an alias for Vec2::hypot2.

Source

pub fn atan2(self) -> f64

Find the angle in radians between this vector and the vector Vec2 { x: 1.0, y: 0.0 } in the positive y direction.

If the vector is interpreted as a complex number, this is the argument. The angle is expressed in radians.

Source

pub fn angle(self) -> f64

Find the angle in radians between this vector and the vector Vec2 { x: 1.0, y: 0.0 } in the positive y direction.

This is an alias for Vec2::atan2.

Source

pub fn from_angle(th: f64) -> Vec2

A unit vector of the given angle.

With th at zero, the result is the positive X unit vector, and at π/2, it is the positive Y unit vector. The angle is expressed in radians.

Thus, in a Y-down coordinate system (as is common for graphics), it is a clockwise rotation, and in Y-up (traditional for math), it is anti-clockwise. This convention is consistent with Affine::rotate.

Source

pub fn lerp(self, other: Vec2, t: f64) -> Vec2

Linearly interpolate between two vectors.

Source

pub fn normalize(self) -> Vec2

Returns a vector of magnitude 1.0 with the same angle as self; i.e. a unit/direction vector.

This produces NaN values when the magnitude is 0.

Source

pub fn round(self) -> Vec2

Returns a new Vec2, with x and y rounded to the nearest integer.

§Examples
use kurbo::Vec2;
let a = Vec2::new(3.3, 3.6).round();
let b = Vec2::new(3.0, -3.1).round();
assert_eq!(a.x, 3.0);
assert_eq!(a.y, 4.0);
assert_eq!(b.x, 3.0);
assert_eq!(b.y, -3.0);
Source

pub fn ceil(self) -> Vec2

Returns a new Vec2, with x and y rounded up to the nearest integer, unless they are already an integer.

§Examples
use kurbo::Vec2;
let a = Vec2::new(3.3, 3.6).ceil();
let b = Vec2::new(3.0, -3.1).ceil();
assert_eq!(a.x, 4.0);
assert_eq!(a.y, 4.0);
assert_eq!(b.x, 3.0);
assert_eq!(b.y, -3.0);
Source

pub fn floor(self) -> Vec2

Returns a new Vec2, with x and y rounded down to the nearest integer, unless they are already an integer.

§Examples
use kurbo::Vec2;
let a = Vec2::new(3.3, 3.6).floor();
let b = Vec2::new(3.0, -3.1).floor();
assert_eq!(a.x, 3.0);
assert_eq!(a.y, 3.0);
assert_eq!(b.x, 3.0);
assert_eq!(b.y, -4.0);
Source

pub fn expand(self) -> Vec2

Returns a new Vec2, with x and y rounded away from zero to the nearest integer, unless they are already an integer.

§Examples
use kurbo::Vec2;
let a = Vec2::new(3.3, 3.6).expand();
let b = Vec2::new(3.0, -3.1).expand();
assert_eq!(a.x, 4.0);
assert_eq!(a.y, 4.0);
assert_eq!(b.x, 3.0);
assert_eq!(b.y, -4.0);
Source

pub fn trunc(self) -> Vec2

Returns a new Vec2, with x and y rounded towards zero to the nearest integer, unless they are already an integer.

§Examples
use kurbo::Vec2;
let a = Vec2::new(3.3, 3.6).trunc();
let b = Vec2::new(3.0, -3.1).trunc();
assert_eq!(a.x, 3.0);
assert_eq!(a.y, 3.0);
assert_eq!(b.x, 3.0);
assert_eq!(b.y, -3.0);
Source

pub fn is_finite(self) -> bool

Is this Vec2 finite?

Source

pub fn is_nan(self) -> bool

Is this Vec2 NaN?

Source

pub fn turn_90(self) -> Vec2

Turn by 90 degrees.

The rotation is clockwise in a Y-down coordinate system. The following relations hold:

u.dot(v) = u.cross(v.turn_90())

u.cross(v) = u.turn_90().dot(v)

Source

pub fn rotate_scale(self, rhs: Vec2) -> Vec2

Combine two vectors interpreted as rotation and scaling.

Interpret both vectors as a rotation and a scale, and combine their effects. by adding the angles and multiplying the magnitudes. This operation is equivalent to multiplication when the vectors are interpreted as complex numbers. It is commutative.

Trait Implementations§

Source§

impl Add<TranslateScale> for Vec2

Source§

type Output = TranslateScale

The resulting type after applying the + operator.
Source§

fn add(self, other: TranslateScale) -> TranslateScale

Performs the + operation. Read more
Source§

impl Add<Vec2> for Circle

Source§

type Output = Circle

The resulting type after applying the + operator.
Source§

fn add(self, v: Vec2) -> Circle

Performs the + operation. Read more
Source§

impl Add<Vec2> for CircleSegment

Source§

type Output = CircleSegment

The resulting type after applying the + operator.
Source§

fn add(self, v: Vec2) -> Self

Performs the + operation. Read more
Source§

impl Add<Vec2> for Ellipse

Source§

fn add(self, v: Vec2) -> Ellipse

In this context adding a Vec2 applies the corresponding translation to the ellipse.

Source§

type Output = Ellipse

The resulting type after applying the + operator.
Source§

impl Add<Vec2> for Line

Source§

type Output = Line

The resulting type after applying the + operator.
Source§

fn add(self, v: Vec2) -> Line

Performs the + operation. Read more
Source§

impl Add<Vec2> for Point

Source§

type Output = Point

The resulting type after applying the + operator.
Source§

fn add(self, other: Vec2) -> Self

Performs the + operation. Read more
Source§

impl Add<Vec2> for Rect

Source§

type Output = Rect

The resulting type after applying the + operator.
Source§

fn add(self, v: Vec2) -> Rect

Performs the + operation. Read more
Source§

impl Add<Vec2> for RoundedRect

Source§

type Output = RoundedRect

The resulting type after applying the + operator.
Source§

fn add(self, v: Vec2) -> RoundedRect

Performs the + operation. Read more
Source§

impl Add<Vec2> for TranslateScale

Source§

type Output = TranslateScale

The resulting type after applying the + operator.
Source§

fn add(self, other: Vec2) -> TranslateScale

Performs the + operation. Read more
Source§

impl Add<Vec2> for Triangle

Source§

type Output = Triangle

The resulting type after applying the + operator.
Source§

fn add(self, v: Vec2) -> Triangle

Performs the + operation. Read more
Source§

impl Add for Vec2

Source§

type Output = Vec2

The resulting type after applying the + operator.
Source§

fn add(self, other: Vec2) -> Vec2

Performs the + operation. Read more
Source§

impl AddAssign<Vec2> for Point

Source§

fn add_assign(&mut self, other: Vec2)

Performs the += operation. Read more
Source§

impl AddAssign<Vec2> for TranslateScale

Source§

fn add_assign(&mut self, other: Vec2)

Performs the += operation. Read more
Source§

impl AddAssign for Vec2

Source§

fn add_assign(&mut self, other: Vec2)

Performs the += operation. Read more
Source§

impl Clone for Vec2

Source§

fn clone(&self) -> Vec2

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Vec2

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Vec2

Source§

fn default() -> Vec2

Returns the “default value” for a type. Read more
Source§

impl Display for Vec2

Source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Div<f64> for Vec2

Source§

fn div(self, other: f64) -> Vec2

Note: division by a scalar is implemented by multiplying by the reciprocal.

This is more efficient but has different roundoff behavior than division.

Source§

type Output = Vec2

The resulting type after applying the / operator.
Source§

impl DivAssign<f64> for Vec2

Source§

fn div_assign(&mut self, other: f64)

Performs the /= operation. Read more
Source§

impl From<(f64, f64)> for Vec2

Source§

fn from(v: (f64, f64)) -> Vec2

Converts to this type from the input type.
Source§

impl From<Vec2> for (f64, f64)

Source§

fn from(v: Vec2) -> (f64, f64)

Converts to this type from the input type.
Source§

impl Mul<Vec2> for f64

Source§

type Output = Vec2

The resulting type after applying the * operator.
Source§

fn mul(self, other: Vec2) -> Vec2

Performs the * operation. Read more
Source§

impl Mul<f64> for Vec2

Source§

type Output = Vec2

The resulting type after applying the * operator.
Source§

fn mul(self, other: f64) -> Vec2

Performs the * operation. Read more
Source§

impl MulAssign<f64> for Vec2

Source§

fn mul_assign(&mut self, other: f64)

Performs the *= operation. Read more
Source§

impl Neg for Vec2

Source§

type Output = Vec2

The resulting type after applying the - operator.
Source§

fn neg(self) -> Vec2

Performs the unary - operation. Read more
Source§

impl PartialEq for Vec2

Source§

fn eq(&self, other: &Vec2) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Sub<Vec2> for Circle

Source§

type Output = Circle

The resulting type after applying the - operator.
Source§

fn sub(self, v: Vec2) -> Circle

Performs the - operation. Read more
Source§

impl Sub<Vec2> for CircleSegment

Source§

type Output = CircleSegment

The resulting type after applying the - operator.
Source§

fn sub(self, v: Vec2) -> Self

Performs the - operation. Read more
Source§

impl Sub<Vec2> for Ellipse

Source§

fn sub(self, v: Vec2) -> Ellipse

In this context subtracting a Vec2 applies the corresponding translation to the ellipse.

Source§

type Output = Ellipse

The resulting type after applying the - operator.
Source§

impl Sub<Vec2> for Line

Source§

type Output = Line

The resulting type after applying the - operator.
Source§

fn sub(self, v: Vec2) -> Line

Performs the - operation. Read more
Source§

impl Sub<Vec2> for Point

Source§

type Output = Point

The resulting type after applying the - operator.
Source§

fn sub(self, other: Vec2) -> Self

Performs the - operation. Read more
Source§

impl Sub<Vec2> for Rect

Source§

type Output = Rect

The resulting type after applying the - operator.
Source§

fn sub(self, v: Vec2) -> Rect

Performs the - operation. Read more
Source§

impl Sub<Vec2> for RoundedRect

Source§

type Output = RoundedRect

The resulting type after applying the - operator.
Source§

fn sub(self, v: Vec2) -> RoundedRect

Performs the - operation. Read more
Source§

impl Sub<Vec2> for TranslateScale

Source§

type Output = TranslateScale

The resulting type after applying the - operator.
Source§

fn sub(self, other: Vec2) -> TranslateScale

Performs the - operation. Read more
Source§

impl Sub<Vec2> for Triangle

Source§

type Output = Triangle

The resulting type after applying the - operator.
Source§

fn sub(self, v: Vec2) -> Triangle

Performs the - operation. Read more
Source§

impl Sub for Vec2

Source§

type Output = Vec2

The resulting type after applying the - operator.
Source§

fn sub(self, other: Vec2) -> Vec2

Performs the - operation. Read more
Source§

impl SubAssign<Vec2> for Point

Source§

fn sub_assign(&mut self, other: Vec2)

Performs the -= operation. Read more
Source§

impl SubAssign<Vec2> for TranslateScale

Source§

fn sub_assign(&mut self, other: Vec2)

Performs the -= operation. Read more
Source§

impl SubAssign for Vec2

Source§

fn sub_assign(&mut self, other: Vec2)

Performs the -= operation. Read more
Source§

impl Sum for Vec2

Source§

fn sum<I: Iterator<Item = Self>>(iter: I) -> Self

Takes an iterator and generates Self from the elements by “summing up” the items.
Source§

impl Copy for Vec2

Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.