checkpoint
[anneal.git] / src / edu / berkeley / qfat / Main.java
index f067158..bb5dd11 100644 (file)
@@ -12,6 +12,8 @@ import edu.berkeley.qfat.geom.Point;
 
 public class Main extends MeshViewer {
 
+    public static int verts = 0;
+
     public static final Random random = new Random();
     
     /** magnification factor */
@@ -127,23 +129,23 @@ public class Main extends MeshViewer {
                     if ((t1.v1().p.times(m).minus(t2.v1().p).mag() < Mesh.EPSILON) &&
                         (t1.v2().p.times(m).minus(t2.v3().p).mag() < Mesh.EPSILON) &&
                         (t1.v3().p.times(m).minus(t2.v2().p).mag() < Mesh.EPSILON)) {
-                        t1.e1().bind(t2.e3().pair);
-                        t1.e2().bind(t2.e2().pair);
-                        t1.e3().bind(t2.e1().pair);
+                        t1.e1().bindEdge(t2.e3());
+                        t1.e2().bindEdge(t2.e2());
+                        t1.e3().bindEdge(t2.e1());
                     }
                     if ((t1.v2().p.times(m).minus(t2.v1().p).mag() < Mesh.EPSILON) &&
                         (t1.v3().p.times(m).minus(t2.v3().p).mag() < Mesh.EPSILON) &&
                         (t1.v1().p.times(m).minus(t2.v2().p).mag() < Mesh.EPSILON)) {
-                        t1.e2().bind(t2.e3().pair);
-                        t1.e3().bind(t2.e2().pair);
-                        t1.e1().bind(t2.e1().pair);
+                        t1.e2().bindEdge(t2.e3());
+                        t1.e3().bindEdge(t2.e2());
+                        t1.e1().bindEdge(t2.e1());
                     }
                     if ((t1.v3().p.times(m).minus(t2.v1().p).mag() < Mesh.EPSILON) &&
                         (t1.v1().p.times(m).minus(t2.v3().p).mag() < Mesh.EPSILON) &&
                         (t1.v2().p.times(m).minus(t2.v2().p).mag() < Mesh.EPSILON)) {
-                        t1.e3().bind(t2.e3().pair);
-                        t1.e1().bind(t2.e2().pair);
-                        t1.e2().bind(t2.e1().pair);
+                        t1.e3().bindEdge(t2.e3());
+                        t1.e1().bindEdge(t2.e2());
+                        t1.e2().bindEdge(t2.e1());
                     }
                 }
             }
@@ -178,13 +180,13 @@ public class Main extends MeshViewer {
     }
 
     public synchronized void breakit() {
-        if (verts > 50) return;
+        if (verts > 300) return;
         PriorityQueue<Mesh.E> es = new PriorityQueue<Mesh.E>();
         for(Mesh.E e : tile.edges()) es.add(e);
         for(int i=0; i<10; i++) {
             Mesh.E e = es.poll();
             verts++;
-            System.out.println("shatter " + e);
+            //System.out.println("shatter " + e);
             e.shatter();
             tile.rebindPoints();
         }
@@ -193,7 +195,7 @@ public class Main extends MeshViewer {
     public synchronized void rand(double temperature, Mesh.Vert p) {
         double tile_score = tile.score();
         double goal_score = goal.score();
-        p.rescore();
+        p.reComputeError();
 
         Vec v = new Vec((random.nextFloat() - (float)0.5) / 1000,
                         (random.nextFloat() - (float)0.5) / 1000,
@@ -220,8 +222,6 @@ public class Main extends MeshViewer {
         }
     }
 
-    public static int verts = 0;
-
     public void anneal() throws Exception {
         int verts = 0;
         while(true) {
@@ -231,13 +231,14 @@ public class Main extends MeshViewer {
                 repaint();
                 for(Mesh.Vert v : hs) rand(10,v);
             }
+            tile.rebuildPointSet();
             breakit();
             repaint();
-            goal.unscoreAll();
+            goal.unApplyQuadricToNeighborAll();
             repaint();
             tile.recomputeAllFundamentalQuadrics();
             repaint();
-            goal.rescoreAll();
+            goal.applyQuadricToNeighborAll();
        }
     }
 
@@ -248,4 +249,5 @@ public class Main extends MeshViewer {
         Main main = new Main(stlf, f);
         main.anneal();
     }
+
 }
\ No newline at end of file