cover method
Implementation
QuadTree<T> cover(num x, num y) {
if (x.isNaN || y.isNaN) {
return this;
}
num x0 = _x0, y0 = _y0, x1 = _x1, y1 = _y1;
if (x0.isNaN) {
x1 = (x0 = x.floor()) + 1;
y1 = (y0 = y.floor()) + 1;
} else {
// 否则,重复覆盖
num z = (x1 - x0) == 0 ? 1 : (x1 - x0);
QuadNode<T>? node = _root;
QuadNode<T>? parent;
int i;
while (x0 > x || x >= x1 || y0 > y || y >= y1) {
i = _toInt(y < y0) << 1 | _toInt(x < x0);
parent = QuadNode(length: 4);
parent[i] = node;
node = parent;
z *= 2;
switch (i) {
case 0:
x1 = x0 + z;
y1 = y0 + z;
break;
case 1:
x0 = x1 - z;
y1 = y0 + z;
break;
case 2:
x1 = x0 + z;
y0 = y1 - z;
break;
case 3:
x0 = x1 - z;
y0 = y1 - z;
break;
}
}
if (_root != null && _root!.hasChild) {
_root = node;
}
}
_x0 = x0;
_y0 = y0;
_x1 = x1;
_y1 = y1;
return this;
}