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>
impl<const MAX_VERTICES: usize> ConvexPolytope<2, MAX_VERTICES>
Sourcepub fn regular(n: usize) -> ConvexPolytope<2, MAX_VERTICES>
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>
impl<const N: usize, const MAX_VERTICES: usize> ConvexPolytope<N, MAX_VERTICES>
Sourcepub fn with_vertices<I>(
vertices: I,
) -> Result<ConvexPolytope<N, MAX_VERTICES>, Error>where
I: IntoIterator<Item = Cartesian<N>>,
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.
Trait Implementations§
Source§impl<const N: usize, const MAX_VERTICES: usize> BoundingSphereRadius for ConvexPolytope<N, MAX_VERTICES>
impl<const N: usize, const MAX_VERTICES: usize> BoundingSphereRadius for ConvexPolytope<N, MAX_VERTICES>
Source§fn bounding_sphere_radius(&self) -> PositiveReal
fn bounding_sphere_radius(&self) -> PositiveReal
Source§impl<const N: usize, const MAX_VERTICES: usize> Clone for ConvexPolytope<N, MAX_VERTICES>
impl<const N: usize, const MAX_VERTICES: usize> Clone for ConvexPolytope<N, MAX_VERTICES>
Source§fn clone(&self) -> ConvexPolytope<N, MAX_VERTICES>
fn clone(&self) -> ConvexPolytope<N, MAX_VERTICES>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'de, const N: usize, const MAX_VERTICES: usize> Deserialize<'de> for ConvexPolytope<N, MAX_VERTICES>
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>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<const N: usize, const MAX_VERTICES: usize> PartialEq for ConvexPolytope<N, MAX_VERTICES>
impl<const N: usize, const MAX_VERTICES: usize> PartialEq for ConvexPolytope<N, MAX_VERTICES>
Source§fn eq(&self, other: &ConvexPolytope<N, MAX_VERTICES>) -> bool
fn eq(&self, other: &ConvexPolytope<N, MAX_VERTICES>) -> bool
self and other values to be equal, and is used by ==.Source§impl<const N: usize, const MAX_VERTICES: usize> Serialize for ConvexPolytope<N, MAX_VERTICES>
impl<const N: usize, const MAX_VERTICES: usize> Serialize for ConvexPolytope<N, MAX_VERTICES>
Source§impl<const N: usize, const MAX_VERTICES: usize> SupportMapping<Cartesian<N>> for ConvexPolytope<N, MAX_VERTICES>
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>
fn support_mapping(&self, n: &Cartesian<N>) -> Cartesian<N>
n.Source§impl<const MAX_VERTICES: usize> TryFrom<ConvexPolytope<2, MAX_VERTICES>> for ConvexSurfaceMesh2d
impl<const MAX_VERTICES: usize> TryFrom<ConvexPolytope<2, MAX_VERTICES>> for ConvexSurfaceMesh2d
Source§fn try_from(
v: ConvexPolytope<2, MAX_VERTICES>,
) -> Result<ConvexSurfaceMesh2d, Error>
fn try_from( v: ConvexPolytope<2, MAX_VERTICES>, ) -> Result<ConvexSurfaceMesh2d, Error>
Construct the convex hull of a ConvexPolytope<2>.
§Errors
Error::DegeneratePolytopewhen there are fewer than 3 non-collinear points.
§Example
Invalid conversion
use hoomd_geometry::shape::{ConvexPolygon, ConvexSurfaceMesh2d};
let equilateral_triangle = ConvexPolygon::regular(3);
let mesh = ConvexSurfaceMesh2d::try_from(equilateral_triangle)?;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> 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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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