Struct libreda_db::layout::prelude::Vector
source · pub struct Vector<T> {
pub x: T,
pub y: T,
}
Expand description
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§
source§impl<T> Vector<T>
impl<T> Vector<T>
sourcepub fn orientation_of(&self, other: Vector<T>) -> Orientation
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);
source§impl<T> Vector<T>
impl<T> Vector<T>
sourcepub fn norm2_squared(&self) -> T
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);
source§impl<T> Vector<T>
impl<T> Vector<T>
sourcepub fn cross_prod(&self, other: Vector<T>) -> T
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);
source§impl<T> Vector<T>
impl<T> Vector<T>
sourcepub fn cast_to_float<F>(&self) -> Vector<F>
pub fn cast_to_float<F>(&self) -> Vector<F>
Convert vector into a vector with floating point data type.
source§impl<T> Vector<T>
impl<T> Vector<T>
sourcepub fn norm2(&self) -> T
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);
sourcepub fn normalized(&self) -> Vector<T>
pub fn normalized(&self) -> Vector<T>
source§impl<T> Vector<T>
impl<T> Vector<T>
sourcepub fn length<F>(&self) -> Fwhere
F: Float,
pub fn length<F>(&self) -> Fwhere
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§
source§impl<T> AddAssign for Vector<T>where
T: AddAssign,
impl<T> AddAssign for Vector<T>where
T: AddAssign,
source§fn add_assign(&mut self, rhs: Vector<T>)
fn add_assign(&mut self, rhs: Vector<T>)
+=
operation. Read moresource§impl<'de, T> Deserialize<'de> for Vector<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for Vector<T>where
T: Deserialize<'de>,
source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<Vector<T>, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<Vector<T>, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
source§impl<T, D> DivAssign<D> for Vector<T>
impl<T, D> DivAssign<D> for Vector<T>
Assigning scalar division.
source§fn div_assign(&mut self, rhs: D)
fn div_assign(&mut self, rhs: D)
/=
operation. Read moresource§impl<T> MapPointwise<T> for Vector<T>where
T: Copy,
impl<T> MapPointwise<T> for Vector<T>where
T: Copy,
source§impl<T, M> MulAssign<M> for Vector<T>
impl<T, M> MulAssign<M> for Vector<T>
In-place scalar multiplication.
source§fn mul_assign(&mut self, rhs: M)
fn mul_assign(&mut self, rhs: M)
*=
operation. Read moresource§impl<T> PartialEq for Vector<T>where
T: PartialEq,
impl<T> PartialEq for Vector<T>where
T: PartialEq,
source§impl<T> Serialize for Vector<T>where
T: Serialize,
impl<T> Serialize for Vector<T>where
T: Serialize,
source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
source§impl<T> SubAssign for Vector<T>where
T: SubAssign,
impl<T> SubAssign for Vector<T>where
T: SubAssign,
source§fn sub_assign(&mut self, rhs: Vector<T>)
fn sub_assign(&mut self, rhs: Vector<T>)
-=
operation. Read moresource§impl<T> Sum for Vector<T>
impl<T> Sum for Vector<T>
Compute the sum of all vectors in the iterator. If the iterator is empty, (0, 0) is returned.
source§impl<T, Dst> TryCastCoord<T, Dst> for Vector<T>
impl<T, Dst> TryCastCoord<T, Dst> for Vector<T>
source§fn try_cast(&self) -> Option<<Vector<T> as TryCastCoord<T, Dst>>::Output>
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);
source§impl<T> Zero for Vector<T>where
T: Zero,
impl<T> Zero for Vector<T>where
T: Zero,
source§fn zero() -> Vector<T>
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);
impl<T> Copy for Vector<T>where
T: Copy,
impl<T> Eq for Vector<T>where
T: Eq,
impl<T> StructuralPartialEq for Vector<T>
Auto Trait Implementations§
impl<T> Freeze for Vector<T>where
T: Freeze,
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§
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
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more