avocado-old/packages/math/quadtree.js
2019-03-25 11:54:20 -05:00

37 lines
740 B
JavaScript

import {quadtree} from 'd3-quadtree';
import * as Rectangle from './rectangle';
export class QuadTree {
constructor() {
this.quadTree = quadtree();
}
add(datum) {
this.quadTree.add(datum);
}
remove(datum) {
this.quadTree.remove(datum);
}
search(queryRectangle) {
const nodes = [];
this.quadTree.visit((node, ...nodeRectangle) => {
nodeRectangle[2] -= nodeRectangle[0];
nodeRectangle[3] -= nodeRectangle[1];
if (!Rectangle.intersects(queryRectangle, nodeRectangle)) {
return true;
}
if (4 !== node.length) {
nodes.push(node);
}
});
return nodes.filter((node) => {
return Rectangle.intersects(queryRectangle, node.data);
});
}
}