ConvexPolytope

Struct ConvexPolytope 

Source
pub struct ConvexPolytope<const N: usize, const MAX_VERTICES: usize = 64> { /* private fields */ }
Expand description

A faceted solid defined by the convex hull of a set of points.

ConvexPolytope stores the given point set without any modification. Therefore, it can be constructed quickly. The implicit convex hull is formed by SupportMapping during intersection tests of Convex(ConvexPolytope) with other Convex(_) types.

Every vertex in the convex hull is an elements of vertices. vertices may also include duplicate, collinear, coplanar, and/or interior points. They are exactly the points given at construction.

§Examples

Construction and basic methods:

use approxim::assert_relative_eq;
use hoomd_geometry::{BoundingSphereRadius, shape::ConvexPolyhedron};

let tetrahedron = ConvexPolyhedron::with_vertices([
    [1.0, 1.0, 1.0].into(),
    [1.0, -1.0, -1.0].into(),
    [-1.0, 1.0, -1.0].into(),
    [-1.0, -1.0, 1.0].into(),
])?;

let bounding_radius = tetrahedron.bounding_sphere_radius();

assert_relative_eq!(bounding_radius.get(), 3.0_f64.sqrt());

Intersection tests:

use hoomd_geometry::{Convex, IntersectsAt, shape::ConvexPolygon};
use hoomd_vector::{Angle, Cartesian};
use std::f64::consts::PI;

let rectangle = ConvexPolygon::with_vertices([
    [-2.0, -1.0].into(),
    [2.0, -1.0].into(),
    [2.0, 1.0].into(),
    [-2.0, 1.0].into(),
])?;
let rectangle = Convex(rectangle);

assert!(!rectangle.intersects_at(
    &rectangle,
    &[0.0, 2.1].into(),
    &Angle::default()
));
assert!(rectangle.intersects_at(
    &rectangle,
    &[0.0, 2.1].into(),
    &Angle::from(PI / 2.0)
));

Implementations§

Source§

impl<const MAX_VERTICES: usize> ConvexPolytope<2, MAX_VERTICES>

Source

pub fn regular(n: usize) -> ConvexPolytope<2, MAX_VERTICES>

Create a regular n-gon with n vertices and circumradius 0.5.

§Example
use hoomd_geometry::shape::ConvexPolygon;

let equilateral_triangle = ConvexPolygon::regular(3);
Source§

impl<const N: usize, const MAX_VERTICES: usize> ConvexPolytope<N, MAX_VERTICES>

Source

pub fn with_vertices<I>( vertices: I, ) -> Result<ConvexPolytope<N, MAX_VERTICES>, Error>
where I: IntoIterator<Item = Cartesian<N>>,

Create an N-polytope with the given vertices.

§Example
use hoomd_geometry::shape::ConvexPolytope;

let equilateral_triangle = ConvexPolytope::<2>::with_vertices([
    [1.0, 0.0].into(),
    [0.5, f64::sqrt(3.0) / 2.0].into(),
    [-0.5, f64::sqrt(3.0) / 2.0].into(),
])?;
§Errors

Error::DegeneratePolytope when no vertices are provided.

Source

pub fn vertices(&self) -> &[Cartesian<N>]

The vertices of the shape.

Trait Implementations§

Source§

impl<const N: usize, const MAX_VERTICES: usize> BoundingSphereRadius for ConvexPolytope<N, MAX_VERTICES>

Source§

fn bounding_sphere_radius(&self) -> PositiveReal

Get the bounding radius.
Source§

impl<const N: usize, const MAX_VERTICES: usize> Clone for ConvexPolytope<N, MAX_VERTICES>

Source§

fn clone(&self) -> ConvexPolytope<N, MAX_VERTICES>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<const N: usize, const MAX_VERTICES: usize> Debug for ConvexPolytope<N, MAX_VERTICES>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de, const N: usize, const MAX_VERTICES: usize> Deserialize<'de> for ConvexPolytope<N, MAX_VERTICES>

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<const N: usize, const MAX_VERTICES: usize> PartialEq for ConvexPolytope<N, MAX_VERTICES>

Source§

fn eq(&self, other: &ConvexPolytope<N, MAX_VERTICES>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<const N: usize, const MAX_VERTICES: usize> Serialize for ConvexPolytope<N, MAX_VERTICES>

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<const N: usize, const MAX_VERTICES: usize> SupportMapping<Cartesian<N>> for ConvexPolytope<N, MAX_VERTICES>

Source§

fn support_mapping(&self, n: &Cartesian<N>) -> Cartesian<N>

Return the furthest extent of a shape in the direction of n.
Source§

impl<const MAX_VERTICES: usize> TryFrom<ConvexPolytope<2, MAX_VERTICES>> for ConvexSurfaceMesh2d

Source§

fn try_from( v: ConvexPolytope<2, MAX_VERTICES>, ) -> Result<ConvexSurfaceMesh2d, Error>

Construct the convex hull of a ConvexPolytope<2>.

§Errors
§Example

Invalid conversion

use hoomd_geometry::shape::{ConvexPolygon, ConvexSurfaceMesh2d};

let equilateral_triangle = ConvexPolygon::regular(3);
let mesh = ConvexSurfaceMesh2d::try_from(equilateral_triangle)?;
Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

impl<const N: usize, const MAX_VERTICES: usize> StructuralPartialEq for ConvexPolytope<N, MAX_VERTICES>

Auto Trait Implementations§

§

impl<const N: usize, const MAX_VERTICES: usize> Freeze for ConvexPolytope<N, MAX_VERTICES>

§

impl<const N: usize, const MAX_VERTICES: usize> RefUnwindSafe for ConvexPolytope<N, MAX_VERTICES>

§

impl<const N: usize, const MAX_VERTICES: usize> Send for ConvexPolytope<N, MAX_VERTICES>

§

impl<const N: usize, const MAX_VERTICES: usize> Sync for ConvexPolytope<N, MAX_VERTICES>

§

impl<const N: usize, const MAX_VERTICES: usize> Unpin for ConvexPolytope<N, MAX_VERTICES>

§

impl<const N: usize, const MAX_VERTICES: usize> UnwindSafe for ConvexPolytope<N, MAX_VERTICES>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,