Enum TetrahedronPointLocation

Source
pub enum TetrahedronPointLocation {
    OnVertex(u32),
    OnEdge(u32, [f32; 2]),
    OnFace(u32, [f32; 3]),
    OnSolid,
}
Expand description

Logical description of the location of a point on a tetrahedron.

This enum describes where a point is located relative to a tetrahedron’s features (vertices, edges, faces, or interior). It’s commonly used in collision detection and geometric queries to understand spatial relationships.

§Variants

  • OnVertex: Point is at one of the four vertices (0=a, 1=b, 2=c, 3=d)
  • OnEdge: Point lies on one of the six edges with barycentric coordinates
  • OnFace: Point lies on one of the four triangular faces with barycentric coordinates
  • OnSolid: Point is inside the tetrahedron volume

§Examples

use parry3d::shape::{Tetrahedron, TetrahedronPointLocation};
use parry3d::math::Point;

let tetra = Tetrahedron::new(
    Point::new(0.0, 0.0, 0.0),
    Point::new(1.0, 0.0, 0.0),
    Point::new(0.0, 1.0, 0.0),
    Point::new(0.0, 0.0, 1.0),
);

// Check location of vertex
let location = TetrahedronPointLocation::OnVertex(0);
if let Some(bcoords) = location.barycentric_coordinates() {
    println!("Barycentric coordinates: {:?}", bcoords);
    // For vertex 0, this will be [1.0, 0.0, 0.0, 0.0]
}

Variants§

§

OnVertex(u32)

The point lies on a vertex.

The vertex index maps to: 0=a, 1=b, 2=c, 3=d

§

OnEdge(u32, [f32; 2])

The point lies on an edge.

Contains the edge index and barycentric coordinates [u, v] where:

  • u is the weight of the first vertex
  • v is the weight of the second vertex
  • u + v = 1.0

Edge indices:

  • 0: segment AB
  • 1: segment AC
  • 2: segment AD
  • 3: segment BC
  • 4: segment BD
  • 5: segment CD
§

OnFace(u32, [f32; 3])

The point lies on a triangular face interior.

Contains the face index and barycentric coordinates [u, v, w] where:

  • u, v, w are the weights of the three vertices
  • u + v + w = 1.0

Face indices:

  • 0: triangle ABC
  • 1: triangle ABD
  • 2: triangle ACD
  • 3: triangle BCD
§

OnSolid

The point lies inside of the tetrahedron.

Implementations§

Source§

impl TetrahedronPointLocation

Source

pub fn barycentric_coordinates(&self) -> Option<[f32; 4]>

The barycentric coordinates corresponding to this point location.

Barycentric coordinates represent a point as a weighted combination of the tetrahedron’s four vertices. The returned array [wa, wb, wc, wd] contains weights such that: point = wa*a + wb*b + wc*c + wd*d where wa + wb + wc + wd = 1.0.

§Returns
  • Some([wa, wb, wc, wd]): The barycentric coordinates for points on features
  • None: If the location is OnSolid (point is in the interior)
§Examples
use parry3d::shape::TetrahedronPointLocation;

// A point on vertex 0 (vertex a)
let location = TetrahedronPointLocation::OnVertex(0);
let bcoords = location.barycentric_coordinates().unwrap();
assert_eq!(bcoords, [1.0, 0.0, 0.0, 0.0]);

// A point on edge 0 (segment AB) at midpoint
let location = TetrahedronPointLocation::OnEdge(0, [0.5, 0.5]);
let bcoords = location.barycentric_coordinates().unwrap();
assert_eq!(bcoords, [0.5, 0.5, 0.0, 0.0]);

// A point inside the tetrahedron
let location = TetrahedronPointLocation::OnSolid;
assert!(location.barycentric_coordinates().is_none());
Source

pub fn same_feature_as(&self, other: &TetrahedronPointLocation) -> bool

Returns true if both self and other correspond to points on the same feature of a tetrahedron.

Two point locations are considered to be on the same feature if they’re both:

  • On the same vertex (same vertex index)
  • On the same edge (same edge index)
  • On the same face (same face index)
  • Both inside the tetrahedron (OnSolid)

This is useful for determining if two points share a common geometric feature, which is important in collision detection and contact point generation.

§Examples
use parry3d::shape::TetrahedronPointLocation;

let loc1 = TetrahedronPointLocation::OnVertex(0);
let loc2 = TetrahedronPointLocation::OnVertex(0);
let loc3 = TetrahedronPointLocation::OnVertex(1);

assert!(loc1.same_feature_as(&loc2));  // Same vertex
assert!(!loc1.same_feature_as(&loc3)); // Different vertices

let edge1 = TetrahedronPointLocation::OnEdge(0, [0.5, 0.5]);
let edge2 = TetrahedronPointLocation::OnEdge(0, [0.3, 0.7]);
let edge3 = TetrahedronPointLocation::OnEdge(1, [0.5, 0.5]);

assert!(edge1.same_feature_as(&edge2));  // Same edge, different coords
assert!(!edge1.same_feature_as(&edge3)); // Different edges

Trait Implementations§

Source§

impl Clone for TetrahedronPointLocation

Source§

fn clone(&self) -> TetrahedronPointLocation

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 Debug for TetrahedronPointLocation

Source§

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

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

impl Copy for TetrahedronPointLocation

Auto Trait Implementations§

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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Sync + Send>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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.