pub struct PointIndex { /* private fields */ }Expand description
A uniform-grid index over a point set.
A grid rather than a k-d tree because scan data is dense and roughly uniform: bucketing is O(n) to build with no comparisons, and a radius query touches only the cells the sphere overlaps. A k-d tree wins on wildly non-uniform data, which is why this type is deliberately not the only shape the API could take — the query methods are what callers use, so the structure can change without moving them.
Implementations§
Source§impl PointIndex
impl PointIndex
Sourcepub fn build(points: &[Point3]) -> Self
pub fn build(points: &[Point3]) -> Self
Build an index over the given positions.
Non-finite positions are dropped from the index and reported by
rejected; they are not silently treated as
present at the origin, which would corrupt every query near it.
Sourcepub fn for_each_within(
&self,
query: Point3,
radius: Scalar,
visit: impl FnMut(PointHit),
) -> Result<(), PointQueryError>
pub fn for_each_within( &self, query: Point3, radius: Scalar, visit: impl FnMut(PointHit), ) -> Result<(), PointQueryError>
Visit every point within radius of query.
Results are exact and complete. Visit order is unspecified; use
radius_into when order matters.
§Errors
Refuses a non-finite query position and a negative or non-finite radius, rather than returning an empty result that a caller could mistake for “nothing nearby”.
Sourcepub fn radius_into(
&self,
query: Point3,
radius: Scalar,
out: &mut Vec<PointHit>,
) -> Result<(), PointQueryError>
pub fn radius_into( &self, query: Point3, radius: Scalar, out: &mut Vec<PointHit>, ) -> Result<(), PointQueryError>
Collect every point within radius, ordered by distance then index.
The vector is cleared first, so a caller may reuse one buffer across many queries and allocate once.
§Errors
As for_each_within.
Sourcepub fn nearest_into(
&self,
query: Point3,
k: usize,
out: &mut Vec<PointHit>,
) -> Result<(), PointQueryError>
pub fn nearest_into( &self, query: Point3, k: usize, out: &mut Vec<PointHit>, ) -> Result<(), PointQueryError>
Collect the k nearest points, ordered by distance then index.
Fewer than k are returned when the cloud holds fewer usable
points; that is a complete answer, not a truncated one.
§Errors
Refuses a non-finite query position.
Trait Implementations§
Source§impl Clone for PointIndex
impl Clone for PointIndex
Source§fn clone(&self) -> PointIndex
fn clone(&self) -> PointIndex
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more