pub struct Grid<T> { /* private fields */ }Expand description
A uniform spatial grid that bins items into cubic cells.
The grid is defined by a bounding box and a cell size. Items are mapped to cells based on their coordinates. This structure is optimized for “fixed-radius” queries, where the search radius is comparable to the cell size.
§Performance
- Construction: O(N) where N is the number of items.
- Neighbor queries: O(1) average-case per query, assuming uniform distribution.
Implementations§
Source§impl<T> Grid<T>
impl<T> Grid<T>
Sourcepub fn new(items: impl IntoIterator<Item = (Point, T)>, cell_size: f64) -> Self
pub fn new(items: impl IntoIterator<Item = (Point, T)>, cell_size: f64) -> Self
Sourcepub fn neighbors<'a>(
&'a self,
center: &Point,
radius: f64,
) -> GridNeighborhood<'a, T> ⓘ
pub fn neighbors<'a>( &'a self, center: &Point, radius: f64, ) -> GridNeighborhood<'a, T> ⓘ
Iterates over all items in cells overlapping with the query sphere.
The returned iterator yields items from candidate cells. To filter strictly by
Euclidean distance, use the .exact() method on the returned iterator.
§Arguments
center- Center of the search sphere.radius- Radius of the search sphere.
Sourcepub fn has_neighbor<F>(&self, point: &Point, radius: f64, predicate: F) -> bool
pub fn has_neighbor<F>(&self, point: &Point, radius: f64, predicate: F) -> bool
Checks if any item in the grid is within radius of point.
This is optimized to return early.
§Arguments
point- The query point.radius- The cutoff distance.predicate- A closure to filter items (e.g., check exact distance).
Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for Grid<T>
impl<T> RefUnwindSafe for Grid<T>where
T: RefUnwindSafe,
impl<T> Send for Grid<T>where
T: Send,
impl<T> Sync for Grid<T>where
T: Sync,
impl<T> Unpin for Grid<T>where
T: Unpin,
impl<T> UnwindSafe for Grid<T>where
T: UnwindSafe,
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
Mutably borrows from an owned value. Read more
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>
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 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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
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
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
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.