X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FPointSet.java;h=fe44993abf5e712fe2011f3f63b3fdd0c58c780f;hb=0f9ce20a060db6537a47b549cbf24fd268699ac6;hp=3b701180b0e6150fc25ae5d3ec50879bd2206d13;hpb=a3a659d0128908676e5793c7e59884b565c367cf;p=anneal.git diff --git a/src/edu/berkeley/qfat/geom/PointSet.java b/src/edu/berkeley/qfat/geom/PointSet.java index 3b70118..fe44993 100644 --- a/src/edu/berkeley/qfat/geom/PointSet.java +++ b/src/edu/berkeley/qfat/geom/PointSet.java @@ -4,9 +4,12 @@ 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]; + public int size() { return exact.size(); } private HashMap exact = new HashMap(); public Iterator iterator() { @@ -14,16 +17,28 @@ public class PointSet implements Iterable { } public void clear() { kd = new KDTree(3); + exact = new HashMap(); } public V get(Point p) { return exact.get(p); } + 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) { V x = get(v.getPoint()); 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; @@ -32,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; @@ -57,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; }