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