Struct libreda_pnr::db::Vector[]

pub struct Vector<T> {
    pub x: T,
    pub y: T,
}

Vector defines a two dimensional vector with x and y components in the Euclidean plane.

Fields

x: T

x coordinate.

y: T

y coordinate.

Implementations

impl<T> Vector<T> where
    T: CoordinateType

pub fn new(x: T, y: T) -> Vector<T>

Create a new vector with x and y coordinates.

Examples

use iron_shapes::vector::Vector;
let a = Vector::new(2, 3);
assert_eq!(a.x, 2);
assert_eq!(a.y, 3);

pub fn norm1(&self) -> T

Get 1-norm of vector, i.e. the sum of the absolute values of its components.

Examples

use iron_shapes::vector::Vector;
let a = Vector::new(-2, 3);
assert_eq!(a.norm1(), 5);

pub fn norm2_squared(&self) -> T

Get squared 2-norm of vector.

Examples

use iron_shapes::vector::Vector;
let a = Vector::new(2, 3);
assert_eq!(a.norm2_squared(), 2*2+3*3);

pub fn dot(&self, other: Vector<T>) -> T

Calculate scalar product.

Examples

use iron_shapes::vector::Vector;

let a = Vector::new(1, 2);
let b = Vector::new(3, 4);

assert_eq!(a.dot(b), 1*3 + 2*4);

pub fn cross_prod(&self, other: Vector<T>) -> T

Calculate cross product.

Examples

use iron_shapes::vector::Vector;

let a = Vector::new(2, 0);
let b = Vector::new(0, 2);

assert_eq!(a.cross_prod(b), 4);
assert_eq!(b.cross_prod(a), -4);

pub fn orientation_of(&self, other: Vector<T>) -> Orientation

Check if other is oriented clockwise or counter-clockwise respective to self.

Examples

use iron_shapes::vector::Vector;
use iron_shapes::types::Orientation;

let a = Vector::new(1, 0);
let b = Vector::new(1, 1);
let c = Vector::new(1, -1);
let d = Vector::new(2, 0);

assert_eq!(a.orientation_of(b), Orientation::CounterClockWise);
assert_eq!(a.orientation_of(c), Orientation::ClockWise);
assert_eq!(a.orientation_of(d), Orientation::Straight);

impl<T> Vector<T> where
    T: CoordinateType + NumCast

pub fn cast_to_float<F>(&self) -> Vector<F> where
    F: CoordinateType + NumCast + Float

Convert vector into a vector with floating point data type.

impl<T> Vector<T> where
    T: CoordinateType + Float

pub fn norm2(&self) -> T

Get 2-norm of vector (length of vector).

Examples

use iron_shapes::vector::Vector;
let a = Vector::new(2.0, 3.0);
let norm2 = a.norm2();
let norm2_sq = norm2 * norm2;
let expected = a.norm2_squared();
assert!(norm2_sq < expected + 1e-12);
assert!(norm2_sq > expected - 1e-12);

pub fn normalized(&self) -> Vector<T>

Return a vector with the same direction but length 1.

Panics

Panics if the vector has length 0.

pub fn normal(&self) -> Vector<T>

Return the normal vector onto this vector. The normal has length 0.

Panics

Panics if the vector has length 0.

impl<T> Vector<T> where
    T: CoordinateType + NumCast

pub fn length<F>(&self) -> F where
    F: Float

Calculate length of vector.

Similar to Vector::norm2 but does potentially return another data type for the length.

Examples

use iron_shapes::vector::Vector;
let a = Vector::new(2.0, 3.0);
let length: f64 = a.length();
let norm2_sq = length * length;
let expected = a.norm2_squared();
assert!(norm2_sq < expected + 1e-12);
assert!(norm2_sq > expected - 1e-12);

Trait Implementations

impl<T> Add<Vector<T>> for Vector<T> where
    T: CoordinateType<Output = T> + Add<T>, 

Vector addition.

type Output = Vector<T>

The resulting type after applying the + operator.

impl<T> AddAssign<Vector<T>> for Vector<T> where
    T: CoordinateType + AddAssign<T>, 

impl<T> Clone for Vector<T> where
    T: Clone

impl<T> Copy for Vector<T> where
    T: Copy

impl<T> Debug for Vector<T> where
    T: Debug + Copy

impl<T> Default for Vector<T> where
    T: Default

impl<T> Display for Vector<T> where
    T: Display + Copy

impl<T> Div<T> for Vector<T> where
    T: CoordinateType<Output = T> + Div<T>, 

Scalar division.

type Output = Vector<T>

The resulting type after applying the / operator.

impl<T> Eq for Vector<T> where
    T: Eq

impl<'_, T> From<&'_ Vector<T>> for Point<T> where
    T: CoordinateType

impl<'a, T> From<&'a (T, T)> for Vector<T> where
    T: CoordinateType

impl<'a, T> From<&'a Vector<T>> for Vector<T> where
    T: CoordinateType

impl<T> From<[T; 2]> for Vector<T> where
    T: CoordinateType

impl<T> From<(T, T)> for Vector<T> where
    T: CoordinateType

impl<T> From<Vector<T>> for Point<T> where
    T: CoordinateType

impl<T> Hash for Vector<T> where
    T: Hash

impl<T> Into<(T, T)> for Vector<T> where
    T: CoordinateType

impl<'_, T> Into<(T, T)> for &'_ Vector<T> where
    T: CoordinateType

impl<T> Into<Vector<T>> for Point<T> where
    T: CoordinateType

impl<T> MapPointwise<T> for Vector<T> where
    T: CoordinateType

impl<T> Mul<T> for Vector<T> where
    T: CoordinateType<Output = T> + Mul<T>, 

Scalar multiplication.

type Output = Vector<T>

The resulting type after applying the * operator.

impl<T> MulAssign<T> for Vector<T> where
    T: CoordinateType + MulAssign<T>, 

In-place scalar multiplication.

impl<T> Neg for Vector<T> where
    T: CoordinateType

type Output = Vector<T>

The resulting type after applying the - operator.

impl<T> PartialEq<Vector<T>> for Vector<T> where
    T: PartialEq<T>, 

impl<T> StructuralEq for Vector<T>

impl<T> StructuralPartialEq for Vector<T>

impl<T> Sub<Vector<T>> for Point<T> where
    T: CoordinateType<Output = T> + Sub<T>, 

Subtract a vector.

type Output = Point<T>

The resulting type after applying the - operator.

impl<T> Sub<Vector<T>> for Vector<T> where
    T: CoordinateType<Output = T> + Sub<T>, 

Vector subtraction.

type Output = Vector<T>

The resulting type after applying the - operator.

impl<T> SubAssign<Vector<T>> for Vector<T> where
    T: CoordinateType + SubAssign<T>, 

impl<T> Sum<Vector<T>> for Vector<T> where
    T: CoordinateType

Compute the sum of all vectors in the iterator. If the iterator is empty, (0, 0) is returned.

impl<T, Dst> TryCastCoord<T, Dst> for Vector<T> where
    T: CoordinateType + NumCast,
    Dst: CoordinateType + NumCast

type Output = Vector<Dst>

Output type of the cast. This is likely the same geometrical type just with other coordinate types. Read more

pub fn try_cast(&self) -> Option<<Vector<T> as TryCastCoord<T, Dst>>::Output>

Try to cast to vector of target data type.

Conversion from float to int can fail and will return None. Float values like infinity or non-a-number have no integer representation.

Examples

use iron_shapes::vector::Vector;
use iron_shapes::traits::TryCastCoord;

let v_int = Vector::new(1,2);
let maybe_v_float: Option<Vector<f64>> = v_int.try_cast();

assert_eq!(maybe_v_float, Some(Vector::new(1.0, 2.0)));

// Conversion from float to int can fail.

let w_float = Vector::new(42.0, 0. / 0.);
let maybe_w_int: Option<Vector<i32>> = w_float.try_cast();

assert_eq!(maybe_w_int, None);

impl<T> Zero for Vector<T> where
    T: CoordinateType

pub fn zero() -> Vector<T>

Get zero-vector.

Examples

use iron_shapes::vector::{Vector, Zero};

let a = Vector::zero();
let b = Vector::new(0, 0);

assert_eq!(a, b);

pub fn is_zero(&self) -> bool

Check if this is the zero-vector.

Examples

use iron_shapes::vector::{Vector, Zero};

assert!(Vector::<usize>::zero().is_zero());

Auto Trait Implementations

impl<T> RefUnwindSafe for Vector<T> where
    T: RefUnwindSafe

impl<T> Send for Vector<T> where
    T: Send

impl<T> Sync for Vector<T> where
    T: Sync

impl<T> Unpin for Vector<T> where
    T: Unpin

impl<T> UnwindSafe for Vector<T> where
    T: UnwindSafe

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> From<T> for T[src]

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

impl<S, T> Mirror<T> for S where
    S: MapPointwise<T>,
    T: CoordinateType

pub fn mirror_x(&self) -> S

Return the geometrical object mirrored at the x axis.

pub fn mirror_y(&self) -> S

Return the geometrical object mirrored at the y axis.

impl<S, T> RotateOrtho<T> for S where
    S: MapPointwise<T>,
    T: CoordinateType

impl<S, T> Scale<T> for S where
    S: MapPointwise<T>,
    T: CoordinateType

impl<T> TextType for T where
    T: Clone + Eq + Debug + Hash

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<S, T> Translate<T> for S where
    S: MapPointwise<T>,
    T: CoordinateType

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.