DOCS v0.1.13 github

@hatch:spatial v0.1.0

Spatial acceleration structures — uniform cluster grid and adaptive octree for 3D worlds. Insert millions of points, then query by radius or AABB in single-digit microseconds. Pure Wren, no plugin; composes with @hatch:gpu's Frustum + Lod for cull and LOD pipelines, and with @hatch:noise for procedural density sampling.

stable system updated May 30, 2026 source ↗
README
$ hatch add @hatch:spatial

MOD spatial

CL ClusterGrid

NEW ClusterGrid.new(minX, minY, minZ, maxX, maxY, maxZ, cellSize)

GET ClusterGrid.count → Num

GET ClusterGrid.cellsX → Num

GET ClusterGrid.cellsY → Num

GET ClusterGrid.cellsZ → Num

FN ClusterGrid.cellIndex_(x, y, z)

FN ClusterGrid.insert(id: Num, x: Num, y: Num, z: Num)

FN ClusterGrid.move(id: Num, x: Num, y: Num, z: Num)

FN ClusterGrid.remove(id: Num)

FN ClusterGrid.removeFromBucket_(ci, id)

FN ClusterGrid.queryRadius(cx: Num, cy: Num, cz: Num, radius: Num, cb: Fn)

FN ClusterGrid.queryAabb(minX: Num, minY: Num, minZ: Num, maxX: Num, maxY: Num, maxZ: Num, cb: Fn)

FN ClusterGrid.clear()

CL Octree

NEW Octree.new(minX: Num, minY: Num, minZ: Num, maxX: Num, maxY: Num, maxZ: Num, maxPerLeaf: Num)

GET Octree.count → Num

FN Octree.insert(id: Num, x: Num, y: Num, z: Num)

FN Octree.remove(id: Num)

FN Octree.queryRadius(cx: Num, cy: Num, cz: Num, radius: Num, cb: Fn)

FN Octree.queryAabb(minX, minY, minZ, maxX, maxY, maxZ, cb)

FN Octree.clear()

CL OctreeNode_

NEW OctreeNode_.new_(minX, minY, minZ, maxX, maxY, maxZ)

GET OctreeNode_.entries

GET OctreeNode_.children

FN OctreeNode_.insert_(id, x, y, z, maxPerLeaf)

FN OctreeNode_.subdivide_(maxPerLeaf)

FN OctreeNode_.childFor_(x, y, z)

FN OctreeNode_.descendForId_(id, x, y, z)

FN OctreeNode_.removeEntry_(id)

FN OctreeNode_.queryRadius_(cx, cy, cz, r2, r, cb)

FN OctreeNode_.queryAabb_(minX, minY, minZ, maxX, maxY, maxZ, cb)

FN OctreeNode_.intersectsSphere_(cx, cy, cz, r)

FN OctreeNode_.clear_()