parry3d/query/point/
point_bounding_sphere.rs

1use crate::bounding_volume::BoundingSphere;
2use crate::math::{Real, Vector};
3use crate::query::{PointProjection, PointQuery};
4use crate::shape::{Ball, FeatureId};
5
6impl PointQuery for BoundingSphere {
7    #[inline]
8    fn project_local_point(&self, pt: Vector, solid: bool) -> PointProjection {
9        let centered_pt = pt - self.center();
10        let mut proj = Ball::new(self.radius()).project_local_point(centered_pt, solid);
11
12        proj.point += self.center();
13        proj
14    }
15
16    #[inline]
17    fn project_local_point_and_get_feature(&self, pt: Vector) -> (PointProjection, FeatureId) {
18        (self.project_local_point(pt, false), FeatureId::Face(0))
19    }
20
21    #[inline]
22    fn distance_to_local_point(&self, pt: Vector, solid: bool) -> Real {
23        let centered_pt = pt - self.center();
24        Ball::new(self.radius()).distance_to_local_point(centered_pt, solid)
25    }
26
27    #[inline]
28    fn contains_local_point(&self, pt: Vector) -> bool {
29        let centered_pt = pt - self.center();
30        Ball::new(self.radius()).contains_local_point(centered_pt)
31    }
32}