- public void remove(HasPoint v) { remove(v.getPoint()); }
- public void remove(Point p) {
- doubles[0] = p.x;
- doubles[1] = p.y;
- doubles[2] = p.z;
- try {
- kd.delete(doubles);
- } catch (Exception e) { }
+ public void remove(V v) {
+ Point p = v.getPoint();
+ rtree.remove(v);
+ exact.remove(p);
+ }
+
+ public V nearest(Point p) { return nearest(p, null); }
+ public V nearest(Point p, Visitor<V> vis) {
+ if (exact.size()==0) return null;
+ return rtree.nearest(p, vis);
+ }
+
+ public Vec diagonal() {
+ float min_x = Float.MAX_VALUE;
+ float min_y = Float.MAX_VALUE;
+ float min_z = Float.MAX_VALUE;
+ float max_x = Float.MIN_VALUE;
+ float max_y = Float.MIN_VALUE;
+ float max_z = Float.MIN_VALUE;
+ for(V v : this) {
+ Point p = v.getPoint();
+ if (p.x < min_x) min_x = p.x;
+ if (p.y < min_y) min_y = p.y;
+ if (p.z < min_z) min_z = p.z;
+ if (p.x > max_x) max_x = p.x;
+ if (p.y > max_y) max_y = p.y;
+ if (p.z > max_z) max_z = p.z;
+ }
+ return new Vec(max_x - min_x, max_y - min_y, max_z - min_z);