--- /dev/null
+package edu.berkeley.qfat.geom;
+import edu.wlu.cs.levy.CG.KDTree;
+
+public class PointSet<V extends HasPoint> {
+
+ private /*final*/ KDTree kd = new KDTree(3);
+ private final double[] doubles = new double[3];
+
+ public void clear() {
+ kd = new KDTree(3);
+ }
+
+ public void add(V v) {
+ Point p = v.getPoint();
+ doubles[0] = p.x;
+ doubles[1] = p.y;
+ doubles[2] = p.z;
+ try {
+ kd.insert(doubles, v);
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
+
+ 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 V nearest(Point p) {
+ Object[] results;
+ try {
+ doubles[0] = p.x;
+ doubles[1] = p.y;
+ doubles[2] = p.z;
+ results = kd.nearest(doubles,1);
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ return (V)results[0];
+ }
+}