This repository contains the monorepo for the following TypeScript packages:
@4bitlabs/quadtree
- A simple 2D quadtree (2×2 spatial division) for fast, efficient spatial queries@4bitlabs/ennetree
- A simple 2D ennetree (3×3 spatial division) for fast, efficient spatial queries.import { quadtree } from '@4bitlabs/quadtree';
class Entity {
bounds(): Bounds {
/* determine bounds */
return [0, 0, 0, 0];
}
}
const space = quadtree<Entity>([0, 0, 1000, 1000], Entity.prototype.getBounds);
Similar to a quadtree but instead of binary recursive subdivisions, an ennetree uses trinary (3×3) subdivisions.
Depending on the use-case, this can sometimes yield more efficient spatial queries.
import { ennetree, type Bounds } from '@4bitlabs/ennetree';
class Entity {
bounds(): Bounds {
/* determine bounds */
return [0, 0, 0, 0];
}
}
const space = ennetree<Entity>([0, 0, 1000, 1000], Entity.prototype.getBounds);
Both quadtree()
and ennetree()
accept a third argument of options
:
option | Description | Defaults |
---|---|---|
maxDepth |
The maximum depth/subdivisions that the graph will divide. | quadtree = 7 , ennetree = 4 |
maxChildren |
The maximum number of objects in a node before it will split | quadtree,ennetree = 10 |
const space = quadtree<Entity>([0, 0, 1000, 1000], Entity.prototype.getBounds, {
maxDepth: 5,
maxChildren: 50,
});