checkpoint
authoradam <adam@megacz.com>
Wed, 5 Dec 2007 05:15:24 +0000 (21:15 -0800)
committeradam <adam@megacz.com>
Wed, 5 Dec 2007 05:15:24 +0000 (21:15 -0800)
darcs-hash:20071205051524-5007d-8bff8a08b420960d6fad9c1f01d132ddb38a2c41.gz

src/edu/berkeley/qfat/geom/PointSet.java [new file with mode: 0644]

diff --git a/src/edu/berkeley/qfat/geom/PointSet.java b/src/edu/berkeley/qfat/geom/PointSet.java
new file mode 100644 (file)
index 0000000..b69edb8
--- /dev/null
@@ -0,0 +1,47 @@
+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];
+    }
+}