Simple and fast Quad Tree implementation written in node.js
npm install quad-node
Also, you can found the latest stable package here: https://www.npmjs.com/package/quad-node
var QuadNode = require('quad-node');
var quadTree = new QuadNode({ minx: -100, miny: -100, maxx: 100, maxy: 100 }, 4, 10);
var item0 = {
bound: { minx: 0, miny: 0, maxx: 10, maxy: 10 },
id: 0
};
quadTree.insert(item0);
var bound = { minx: 5, miny: 5, maxx: 8, maxy: 8 };
quadTree.find(bound, function(item) {
console.log("Found item id="+item.id);
});
var bound = { minx: 5, miny: 5, maxx: 8, maxy: 8 };
if (quadTree.any(bound)) {
console.log("specified boundary contains at least one item");
}
var bound = { minx: 5, miny: 5, maxx: 8, maxy: 8 };
if (quadTree.any(bound, function(item) { return item.id==0; })) {
console.log("specified boundary contains at least one item with id==0");
}
item0.bound = { minx: 20, miny: 20, maxx: 25, maxy: 25 };
quadTree.update(item0);
quadTree.remove(item0);
quadTree.clear();
console.log("Total nodes in the quad tree: " + quadTree.scanNodeCount());
console.log("Total items in the quad tree: " + quadTree.scanItemCount());
- field "bound" for the item is mandatory and should be present. It's used by QuadNode to determine item boundaries.
- QuadNode will assign field "_quadNode" to the item. This field is reserved for internal QuadNode usage and should not be modified from user code.
- item should belong to single QuadNode and should not be inserted twice.