add RTree classes
[anneal.git] / src / edu / berkeley / qfat / geom / PointSet.java
index cd3edb7..fe44993 100644 (file)
@@ -4,6 +4,8 @@ import java.util.*;
 
 public class PointSet<V extends HasPoint> implements Iterable<V> {
 
+    private final RTree<V> rtree = new RTree<V>();
+
     private /*final*/ KDTree kd = new KDTree(3);
     private final double[] doubles = new double[3];
 
@@ -23,10 +25,12 @@ public class PointSet<V extends HasPoint> implements Iterable<V> {
     }
 
     public void rebuild() {
+        /*
         HashMap<Point,V> old_exact = exact;
         exact = new HashMap<Point,V>();
         kd = new KDTree(3);
         for(V v : old_exact.values()) add(v);
+        */
     }
 
     public void add(V v) {
@@ -34,6 +38,7 @@ public class PointSet<V extends HasPoint> implements Iterable<V> {
         if (x != null && x.equals(v)) return;
         if (x != null) throw new Error("duplicates!");
         Point p = v.getPoint();
+        /*
         doubles[0] = p.x;
         doubles[1] = p.y;
         doubles[2] = p.z;
@@ -42,22 +47,28 @@ public class PointSet<V extends HasPoint> implements Iterable<V> {
         } catch (Exception e) {
             throw new Error(e);
         }
+        */
+        rtree.insert(v);
         exact.put(p, v);
     }
 
-    public void remove(HasPoint v) { remove(v.getPoint()); }
-    public void remove(Point p) {
+    public void remove(V v) {
+        Point p = v.getPoint();
+        /*
         doubles[0] = p.x;
         doubles[1] = p.y;
         doubles[2] = p.z;
         try {
             kd.delete(doubles);
         } catch (Exception e) { }
+        */
+        rtree.remove(v);
         exact.remove(p);
     }
 
     public V nearest(Point p) {
         if (exact.size()==0) return null;
+        /*
         Object[] results;
         try {
             doubles[0] = p.x;
@@ -67,7 +78,11 @@ public class PointSet<V extends HasPoint> implements Iterable<V> {
         } catch (Exception e) {
             throw new Error(e);
         }
-        return (V)results[0];
+        V kd_says = (V)results[0];
+        */
+        V rt_says = rtree.nearest(p);
+        //if (kd_says != rt_says) System.err.println("disagree: " + p + " " + kd_says + " " + rt_says);
+        return rt_says;
     }