avocado-old/packages/math/quadtree.js

39 lines
707 B
JavaScript
Raw Normal View History

2019-03-20 18:33:59 -05:00
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 = [];
2019-04-16 23:59:08 -05:00
this.quadTree.visit((node, x, y, x0, y0) => {
const w = x0 - x;
const h = y0 - y;
if (!Rectangle.intersects(queryRectangle, [x, y, w, h])) {
2019-03-20 18:33:59 -05:00
return true;
}
2019-04-16 23:59:08 -05:00
if (4 === node.length) {
return;
2019-03-20 18:33:59 -05:00
}
2019-04-16 23:59:08 -05:00
if (!Rectangle.intersects(queryRectangle, node.data)) {
return;
}
nodes.push(node);
2019-03-20 18:33:59 -05:00
});
2019-04-16 23:59:08 -05:00
return nodes;
2019-03-20 18:33:59 -05:00
}
}