X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FPointSet.java;h=fe44993abf5e712fe2011f3f63b3fdd0c58c780f;hp=cd3edb73d8b08133e8ccd7f4bacf5438808e7da6;hb=0f9ce20a060db6537a47b549cbf24fd268699ac6;hpb=57376a862c00fa1c8731f9989085fcfceeee0370 diff --git a/src/edu/berkeley/qfat/geom/PointSet.java b/src/edu/berkeley/qfat/geom/PointSet.java index cd3edb7..fe44993 100644 --- a/src/edu/berkeley/qfat/geom/PointSet.java +++ b/src/edu/berkeley/qfat/geom/PointSet.java @@ -4,6 +4,8 @@ import java.util.*; public class PointSet implements Iterable { + private final RTree rtree = new RTree(); + private /*final*/ KDTree kd = new KDTree(3); private final double[] doubles = new double[3]; @@ -23,10 +25,12 @@ public class PointSet implements Iterable { } public void rebuild() { + /* HashMap old_exact = exact; exact = new HashMap(); kd = new KDTree(3); for(V v : old_exact.values()) add(v); + */ } public void add(V v) { @@ -34,6 +38,7 @@ public class PointSet implements Iterable { 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 implements Iterable { } 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 implements Iterable { } 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; }