pub enum Orientation {
CounterClockWise,
ClockWise,
CoLinear,
}
Variants§
Implementations§
source§impl Orientation
impl Orientation
sourcepub fn new<T>(p1: &[T; 2], p2: &[T; 2], p3: &[T; 2]) -> Orientationwhere
T: PolygonScalar,
pub fn new<T>(p1: &[T; 2], p2: &[T; 2], p3: &[T; 2]) -> Orientationwhere
T: PolygonScalar,
Determine the direction you have to turn if you walk from p1
to p2
to p3
.
For fixed-precision types (i8,i16,i32,i64,etc), this function is guaranteed to work for any input and never cause any arithmetic overflows.
§Polymorphism
This function works with both Points and Vectors. You should prefer to use Point::orient when possible.
§Examples
let p1 = Point::new([ 0, 0 ]);
let p2 = Point::new([ 0, 1 ]); // One unit above p1.
// (0,0) -> (0,1) -> (0,2) == Orientation::CoLinear
assert!(Orientation::new(&p1, &p2, &Point::new([ 0, 2 ])).is_colinear());
// (0,0) -> (0,1) -> (-1,2) == Orientation::CounterClockWise
assert!(Orientation::new(&p1, &p2, &Point::new([ -1, 2 ])).is_ccw());
// (0,0) -> (0,1) -> (1,2) == Orientation::ClockWise
assert!(Orientation::new(&p1, &p2, &Point::new([ 1, 2 ])).is_cw());
sourcepub fn along_vector<T>(
p1: &[T; 2],
vector: &Vector<T, 2>,
p2: &[T; 2],
) -> Orientationwhere
T: PolygonScalar,
pub fn along_vector<T>(
p1: &[T; 2],
vector: &Vector<T, 2>,
p2: &[T; 2],
) -> Orientationwhere
T: PolygonScalar,
Locate p2
in relation to the line determined by the point p1
and the direction
vector.
For fixed-precision types (i8,i16,i32,i64,etc), this function is guaranteed to work for any input and never cause any arithmetic overflows.
This function is identical to Orientation::new
(p1, p1+v, p2)
but will never
cause arithmetic overflows even if p+v
would overflow.
§Examples
let v = Vector([ 1, 1 ]); // Vector pointing to the top-right corner.
let p1 = Point::new([ 5, 5 ]);
assert!(Orientation::along_vector(&p1, &v, &Point::new([ 6, 6 ])).is_colinear());
assert!(Orientation::along_vector(&p1, &v, &Point::new([ 7, 8 ])).is_ccw());
assert!(Orientation::along_vector(&p1, &v, &Point::new([ 8, 7 ])).is_cw());
pub fn along_perp_vector<T>(
p1: &[T; 2],
vector: &Vector<T, 2>,
p2: &[T; 2],
) -> Orientationwhere
T: PolygonScalar,
pub fn is_colinear(self) -> bool
pub fn is_ccw(self) -> bool
pub fn is_cw(self) -> bool
pub fn then(self, other: Orientation) -> Orientation
pub fn break_ties(self, a: u32, b: u32, c: u32) -> SoS
pub fn sos(self, other: SoS) -> SoS
pub fn reverse(self) -> Orientation
pub fn ccw_cmp_around_with<T>(
vector: &Vector<T, 2>,
p1: &[T; 2],
p2: &[T; 2],
p3: &[T; 2],
) -> Orderingwhere
T: PolygonScalar,
Trait Implementations§
source§impl Clone for Orientation
impl Clone for Orientation
source§fn clone(&self) -> Orientation
fn clone(&self) -> Orientation
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Debug for Orientation
impl Debug for Orientation
source§impl Ord for Orientation
impl Ord for Orientation
source§fn cmp(&self, other: &Orientation) -> Ordering
fn cmp(&self, other: &Orientation) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
source§impl PartialEq for Orientation
impl PartialEq for Orientation
source§impl PartialOrd for Orientation
impl PartialOrd for Orientation
impl Copy for Orientation
impl Eq for Orientation
impl StructuralPartialEq for Orientation
Auto Trait Implementations§
impl Freeze for Orientation
impl RefUnwindSafe for Orientation
impl Send for Orientation
impl Sync for Orientation
impl Unpin for Orientation
impl UnwindSafe for Orientation
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
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)