Struct kurbo::Vec2[][src]

pub struct Vec2 {
    pub x: f64,
    pub y: f64,
}

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

impl Vec2[src]

pub const ZERO: Vec2[src]

The vector (0, 0).

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

Create a new vector.

pub const fn to_point(self) -> Point[src]

Convert this vector into a Point.

pub const fn to_size(self) -> Size[src]

Convert this vector into a Size.

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

Dot product of two vectors.

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

Cross product of two vectors.

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

pub fn hypot(self) -> f64[src]

Magnitude of vector.

pub fn hypot2(self) -> f64[src]

Magnitude squared of vector.

pub fn atan2(self) -> f64[src]

Angle of vector.

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

pub fn from_angle(th: f64) -> Vec2[src]

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.

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

Linearly interpolate between two vectors.

pub fn normalize(self) -> Vec2[src]

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 magnitutde is 0.

pub fn round(self) -> Vec2[src]

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);

pub fn ceil(self) -> Vec2[src]

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);

pub fn floor(self) -> Vec2[src]

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);

pub fn expand(self) -> Vec2[src]

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);

pub fn trunc(self) -> Vec2[src]

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);

pub fn is_finite(self) -> bool[src]

Is this Vec2 finite?

pub fn is_nan(self) -> bool[src]

Is this Vec2 NaN?

Trait Implementations

impl Add<TranslateScale> for Vec2[src]

type Output = TranslateScale

The resulting type after applying the + operator.

impl Add<Vec2> for Circle[src]

type Output = Circle

The resulting type after applying the + operator.

impl Add<Vec2> for CircleSegment[src]

type Output = CircleSegment

The resulting type after applying the + operator.

impl Add<Vec2> for Ellipse[src]

type Output = Ellipse

The resulting type after applying the + operator.

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

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

impl Add<Vec2> for Line[src]

type Output = Line

The resulting type after applying the + operator.

impl Add<Vec2> for Point[src]

type Output = Point

The resulting type after applying the + operator.

impl Add<Vec2> for Rect[src]

type Output = Rect

The resulting type after applying the + operator.

impl Add<Vec2> for RoundedRect[src]

type Output = RoundedRect

The resulting type after applying the + operator.

impl Add<Vec2> for TranslateScale[src]

type Output = TranslateScale

The resulting type after applying the + operator.

impl Add<Vec2> for Vec2[src]

type Output = Vec2

The resulting type after applying the + operator.

impl AddAssign<Vec2> for Point[src]

impl AddAssign<Vec2> for TranslateScale[src]

impl AddAssign<Vec2> for Vec2[src]

impl Clone for Vec2[src]

impl Copy for Vec2[src]

impl Debug for Vec2[src]

impl Default for Vec2[src]

impl<'de> Deserialize<'de> for Vec2[src]

impl Display for Vec2[src]

impl Div<f64> for Vec2[src]

type Output = Vec2

The resulting type after applying the / operator.

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

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

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

impl DivAssign<f64> for Vec2[src]

impl From<(f64, f64)> for Vec2[src]

impl From<Vector2<f64>> for Vec2[src]

impl Mul<f64> for Vec2[src]

type Output = Vec2

The resulting type after applying the * operator.

impl MulAssign<f64> for Vec2[src]

impl Neg for Vec2[src]

type Output = Vec2

The resulting type after applying the - operator.

impl PartialEq<Vec2> for Vec2[src]

impl Serialize for Vec2[src]

impl StructuralPartialEq for Vec2[src]

impl Sub<Vec2> for Circle[src]

type Output = Circle

The resulting type after applying the - operator.

impl Sub<Vec2> for CircleSegment[src]

type Output = CircleSegment

The resulting type after applying the - operator.

impl Sub<Vec2> for Ellipse[src]

type Output = Ellipse

The resulting type after applying the - operator.

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

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

impl Sub<Vec2> for Line[src]

type Output = Line

The resulting type after applying the - operator.

impl Sub<Vec2> for Point[src]

type Output = Point

The resulting type after applying the - operator.

impl Sub<Vec2> for Rect[src]

type Output = Rect

The resulting type after applying the - operator.

impl Sub<Vec2> for RoundedRect[src]

type Output = RoundedRect

The resulting type after applying the - operator.

impl Sub<Vec2> for TranslateScale[src]

type Output = TranslateScale

The resulting type after applying the - operator.

impl Sub<Vec2> for Vec2[src]

type Output = Vec2

The resulting type after applying the - operator.

impl SubAssign<Vec2> for Point[src]

impl SubAssign<Vec2> for TranslateScale[src]

impl SubAssign<Vec2> for Vec2[src]

Auto Trait Implementations

impl RefUnwindSafe for Vec2

impl Send for Vec2

impl Sync for Vec2

impl Unpin for Vec2

impl UnwindSafe for Vec2

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> DeserializeOwned for T where
    T: for<'de> Deserialize<'de>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.