2D space partitioning for fast point queries.
orx-hash-grid
provides the classes HashGrid
and Cell
, in most cases only HashGrid
is used.
Create a hash grid for a given radius.
val grid = HashGrid(radius)
Check for a given query point if the grid is free, i.e. there is no point in the grid at distance less than radius
away from the
query point.
grid.isFree(query)
Add a point to the hash grid structure:
grid.insert(point)
Iterate over all points in the hash grid:
for (point in grid.points()) {
// do something with point
}
orx-hash-grid
provides short-hand extension functions to List<Vector2>
fun List<Vector2>.filter(radius: Double) : List<Vector2>
filters the points in the list such that only points with an inter-distance of radius
remain.
val points = (0 until 10_000).map { drawer.bounds.uniform() }
val filtered = points.filter(20.0)
fun List<Vector2>.hashGrid(radius: Double) : HashGrid
constructs a (mutable) HashGrid
containing all points in the list.
val points = (0 until 10_000).map { drawer.bounds.uniform() }
val hashGrid = points.hashGrid(20.0)
orx-noise
usesHashGrid
to generate Poisson distributed points. Link