[−][src]Struct kurbo::Vec2
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);
Trait Implementations
impl Add<TranslateScale> for Vec2
[src]
type Output = TranslateScale
The resulting type after applying the +
operator.
fn add(self, other: TranslateScale) -> TranslateScale
[src]
impl Add<Vec2> for Circle
[src]
type Output = Circle
The resulting type after applying the +
operator.
fn add(self, v: Vec2) -> Circle
[src]
impl Add<Vec2> for CircleSegment
[src]
type Output = CircleSegment
The resulting type after applying the +
operator.
fn add(self, v: Vec2) -> Self
[src]
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.
fn add(self, v: Vec2) -> Line
[src]
impl Add<Vec2> for Point
[src]
type Output = Point
The resulting type after applying the +
operator.
fn add(self, other: Vec2) -> Self
[src]
impl Add<Vec2> for Rect
[src]
type Output = Rect
The resulting type after applying the +
operator.
fn add(self, v: Vec2) -> Rect
[src]
impl Add<Vec2> for TranslateScale
[src]
type Output = TranslateScale
The resulting type after applying the +
operator.
fn add(self, other: Vec2) -> TranslateScale
[src]
impl Add<Vec2> for Vec2
[src]
type Output = Vec2
The resulting type after applying the +
operator.
fn add(self, other: Vec2) -> Vec2
[src]
impl AddAssign<Vec2> for Point
[src]
fn add_assign(&mut self, other: Vec2)
[src]
impl AddAssign<Vec2> for TranslateScale
[src]
fn add_assign(&mut self, other: Vec2)
[src]
impl AddAssign<Vec2> for Vec2
[src]
fn add_assign(&mut self, other: 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]
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
[src]
__D: Deserializer<'de>,
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]
fn div_assign(&mut self, other: f64)
[src]
impl From<(f64, f64)> for Vec2
[src]
impl From<Vec2> for (f64, f64)
[src]
impl From<Vec2> for Vector2<f64>
[src]
impl From<Vector2<f64>> for Vec2
[src]
impl Into<Size> for Vec2
[src]
impl Mul<Vec2> for f64
[src]
type Output = Vec2
The resulting type after applying the *
operator.
fn mul(self, other: Vec2) -> Vec2
[src]
impl Mul<f64> for Vec2
[src]
type Output = Vec2
The resulting type after applying the *
operator.
fn mul(self, other: f64) -> Vec2
[src]
impl MulAssign<f64> for Vec2
[src]
fn mul_assign(&mut self, other: f64)
[src]
impl Neg for Vec2
[src]
impl PartialEq<Vec2> for Vec2
[src]
impl Serialize for Vec2
[src]
fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error> where
__S: Serializer,
[src]
__S: Serializer,
impl StructuralPartialEq for Vec2
[src]
impl Sub<Vec2> for Circle
[src]
type Output = Circle
The resulting type after applying the -
operator.
fn sub(self, v: Vec2) -> Circle
[src]
impl Sub<Vec2> for CircleSegment
[src]
type Output = CircleSegment
The resulting type after applying the -
operator.
fn sub(self, v: Vec2) -> Self
[src]
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.
fn sub(self, v: Vec2) -> Line
[src]
impl Sub<Vec2> for Point
[src]
type Output = Point
The resulting type after applying the -
operator.
fn sub(self, other: Vec2) -> Self
[src]
impl Sub<Vec2> for Rect
[src]
type Output = Rect
The resulting type after applying the -
operator.
fn sub(self, v: Vec2) -> Rect
[src]
impl Sub<Vec2> for TranslateScale
[src]
type Output = TranslateScale
The resulting type after applying the -
operator.
fn sub(self, other: Vec2) -> TranslateScale
[src]
impl Sub<Vec2> for Vec2
[src]
type Output = Vec2
The resulting type after applying the -
operator.
fn sub(self, other: Vec2) -> Vec2
[src]
impl SubAssign<Vec2> for Point
[src]
fn sub_assign(&mut self, other: Vec2)
[src]
impl SubAssign<Vec2> for TranslateScale
[src]
fn sub_assign(&mut self, other: Vec2)
[src]
impl SubAssign<Vec2> for Vec2
[src]
fn sub_assign(&mut self, other: 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]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> DeserializeOwned for T where
T: for<'de> Deserialize<'de>,
[src]
T: for<'de> Deserialize<'de>,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,