package edu.berkeley.qfat.geom;
import java.util.*;
+/** a set of points, plus many useful methods operating over the set */
public class PointSet<V extends HasPoint> implements Iterable<V> {
private RTree<V> rtree = new RTree<V>();
return exact.get(p);
}
- public void rebuild() {
- }
-
public void add(V v) {
V x = get(v.getPoint());
if (x != null && x.equals(v)) return;
return rtree.nearest(p);
}
+ // FEATURE: compute incrementally?
public Vec diagonal() {
float min_x = Float.MAX_VALUE;
float min_y = Float.MAX_VALUE;
return new Vec(max_x - min_x, max_y - min_y, max_z - min_z);
}
+ // FEATURE: compute incrementally?
public Point centroid() {
float min_x = Float.MAX_VALUE;
float min_y = Float.MAX_VALUE;
private com.infomatiq.jsi.rtree.RTree rtree =
new com.infomatiq.jsi.rtree.RTree();
- int lowid = 0;
- HashMap<Integer, V> idToV = new HashMap<Integer, V>();
- HashMap<V, Integer> vToId = new HashMap<V, Integer>();
+ private int lowid = 0;
+ private HashMap<Integer, V> idToV = new HashMap<Integer, V>();
+ private HashMap<V, Integer> vToId = new HashMap<V, Integer>();
public Iterator<V> iterator() { return vToId.keySet().iterator(); }
int id = lowid++;
idToV.put(id, v);
vToId.put(v, id);
- rtree.add(new com.infomatiq.jsi.Rectangle(v.getMinX(), v.getMinY(), v.getMinZ(),
- v.getMaxX(), v.getMaxY(), v.getMaxZ()),
- id);
+ rect.set(v.getMinX(), v.getMinY(), v.getMinZ(), v.getMaxX(), v.getMaxY(), v.getMaxZ());
+ rtree.add(rect, id);
}
+ private com.infomatiq.jsi.Rectangle rect = new com.infomatiq.jsi.Rectangle(0,0,0,0,0,0);
public void remove(V v) {
Integer idi = vToId.get(v);
if (idi==null) return;
int id = idi;
idToV.remove(id);
vToId.remove(v);
- rtree.delete(new com.infomatiq.jsi.Rectangle(v.getMinX(), v.getMinY(), v.getMinZ(),
- v.getMaxX(), v.getMaxY(), v.getMaxZ()),
- id);
+ rect.set(v.getMinX(), v.getMinY(), v.getMinZ(), v.getMaxX(), v.getMaxY(), v.getMaxZ());
+ rtree.delete(rect, id);
}
// gross...