addAll method

QuadTree<T> addAll(
  1. List<T> data
)

Implementation

QuadTree<T> addAll(List<T> data) {
  int n = data.length;
  Float64List xz = Float64List(n);
  Float64List yz = Float64List(n);
  double x0 = double.infinity;
  double y0 = x0;
  double x1 = -x0;
  double y1 = x1;

  // 计算点及其范围
  T d;
  double x, y;
  for (int i = 0; i < n; ++i) {
    d = data[i];
    x = xFun.call(d);
    y = yFun.call(d);
    if (x.isNaN || y.isNaN) {
      continue;
    }
    xz[i] = x;
    yz[i] = y;
    if (x < x0) x0 = x;
    if (x > x1) x1 = x;
    if (y < y0) y0 = y;
    if (y > y1) y1 = y;
  }

  // 如果没有(有效)点,则中止
  if (x0 > x1 || y0 > y1) {
    return this;
  }

  // 拓展树范围以覆盖新点
  cover(x0, y0).cover(x1, y1);

  // 添加新的点.
  for (int i = 0; i < n; ++i) {
    _addInner(this, xz[i], yz[i], data[i]);
  }
  return this;
}