Struct libreda_pnr::db::Point[]

pub struct Point<T> where
    T: CoordinateType
{ /* fields omitted */ }

A point is defined by a x and y coordinate in the euclidean plane.

Implementations

impl<T> Point<T> where
    T: CoordinateType

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

Create a new point with x and y coordinates.

pub fn zero() -> Point<T>

Get zero-Point.

Examples

use iron_shapes::point::Point;

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

assert_eq!(a, b);

pub fn is_zero(&self) -> bool

Check if this is the zero-Point.

Examples

use iron_shapes::point::*;

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

pub fn distance_sq(self, other: &Point<T>) -> T

Compute the squared distance to the other point.

Examples

use iron_shapes::point::*;

let a = Point::new(0, 0);
let b = Point::new(2, 0);
assert_eq!(a.distance_sq(&b), 2*2);

pub fn cross_prod3(&self, b: Point<T>, c: Point<T>) -> T

Calculate the cross product of the two vectors defined by three points.

A positive value implies that selfab is counter-clockwise, negative implies clockwise.

(b - self) x (c - b)

Examples

use iron_shapes::point::Point;

let a = Point::new(1,0);
let b = Point::new(1,1);
let c = Point::new(0,1);

let p = a.cross_prod3(b, c);

assert_eq!(p, (b-a).cross_prod(c - b));

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

Return the location of this point as a vector.

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

pub fn distance<F>(self, other: &Point<T>) -> F where
    F: Float

Compute the Euclidean distance betwen two points.

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

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

Convert Point into a Point with floating point data type.

Methods from Deref<Target = Vector<T>>

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

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

Convert vector into a vector with floating point data type.

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.

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, V> Add<V> for Point<T> where
    V: Into<Point<T>>,
    T: CoordinateType<Output = T> + Add<T>, 

Point addition.

type Output = Point<T>

The resulting type after applying the + operator.

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

impl<T> Clone for Point<T> where
    T: Clone + CoordinateType

impl<T> Copy for Point<T> where
    T: Copy + CoordinateType

impl<T> Debug for Point<T> where
    T: Debug + CoordinateType

impl<T> Default for Point<T> where
    T: Default + CoordinateType

impl<T> Deref for Point<T> where
    T: CoordinateType

type Target = Vector<T>

The resulting type after dereferencing.

impl<T> Display for Point<T> where
    T: Display + CoordinateType

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

Scalar division.

type Output = Point<T>

The resulting type after applying the / operator.

impl<T> Eq for Point<T> where
    T: Eq + CoordinateType

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

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

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

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

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

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

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

impl<T> Hash for Point<T> where
    T: Hash + CoordinateType

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

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

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

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

Point wise transformation for a single point.

pub fn transform<F>(&self, transformation: F) -> Point<T> where
    F: Fn(Point<T>) -> Point<T>, 

Point wise transformation.

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

Scalar multiplication.

type Output = Point<T>

The resulting type after applying the * operator.

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

In-place scalar multiplication.

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

type Output = Point<T>

The resulting type after applying the - operator.

impl<T> Ord for Point<T> where
    T: CoordinateType + Ord

Compare points.

The ordering is determined by the x-coordinates. If it is the same for both points the y-coordinate is used.

Point a > Point b iff a.x > b.x || (a.x == b.x && a.y > b.y).

impl<T> PartialEq<Point<T>> for Point<T> where
    T: PartialEq<T> + CoordinateType

impl<T> PartialOrd<Point<T>> for Point<T> where
    T: CoordinateType

Compare points.

The ordering is determined by the x-coordinates. If it is the same for both points the y-coordinate is used.

Point a > Point b iff a.x > b.x || (a.x == b.x && a.y > b.y).

impl<T> StructuralEq for Point<T> where
    T: CoordinateType

impl<T> StructuralPartialEq for Point<T> where
    T: CoordinateType

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

Subtract a point.

type Output = Vector<T>

The resulting type after applying the - operator.

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, V> SubAssign<V> for Point<T> where
    V: Into<Vector<T>>,
    T: CoordinateType + SubAssign<T>, 

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

pub fn sum<I>(iter: I) -> Point<T> where
    I: Iterator<Item = Point<T>>, 

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

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

type Output = Point<Dst>

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

Auto Trait Implementations

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

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

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

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

impl<T> UnwindSafe for Point<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.