cover method

QuadTree<T> cover(
  1. num x,
  2. num y
)

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;
}