checkpoint
[anneal.git] / src / edu / berkeley / qfat / Main.java
index b774066..2b36405 100644 (file)
@@ -239,7 +239,7 @@ public class Main implements GLEventListener, MouseListener, MouseMotionListener
         Random random = new Random();
 
     public synchronized void breakit() {
-        if (verts > 300) return;
+        if (verts > 50) return;
         //double min = (tile.avgedge/tile.numedges)*(1+(4/(double)verts));
         //if (verts>0 && tile.es.peek().length() < min) return;
         PriorityQueue<Mesh.E> es = new PriorityQueue<Mesh.E>();
@@ -257,17 +257,28 @@ public class Main implements GLEventListener, MouseListener, MouseMotionListener
     public synchronized void rand(double temperature, Mesh.Vert p) {
         double tile_score = tile.score();
         double goal_score = goal.score();
-        
         p.rescore();
+
+        /*
         //if (p.watch==null) return;
         float r1 = Math.abs(random.nextFloat());
         r1 = r1 - (float)Math.floor(r1);
         r1 = r1 * (float)0.01;
         r1 = r1 - (float)0.005;
+        public Vert partner() { return quadric==null ? this : quadric; }
+        public Point quadric() { return quadric_count==0 ? partner().p :
+                new Point(quadric_x/quadric_count, quadric_y/quadric_count, quadric_z/quadric_count); }
 
         Vec v = p.nearest_vert_in_other_mesh().minus(p.p).norm().times(r1);
-
+        */
         //v = p.norm().times(v.dot(p.norm()));
+        /*
+        Vec v = new Vec((random.nextFloat() - (float)0.5) / 1000,
+                        (random.nextFloat() - (float)0.5) / 1000,
+                        (random.nextFloat() - (float)0.5) / 1000);
+        */
+        Matrix inv = p.errorQuadric();
+        Vec v = new Vec(inv.d, inv.h, inv.l).norm().times(1/(float)1000);
 
         boolean aspect = false;//(Math.abs(random.nextInt()) % 100) <= 2;
         Matrix old_tile_aspect = null;//goal.aspect;
@@ -291,6 +302,7 @@ public class Main implements GLEventListener, MouseListener, MouseMotionListener
         double swapProbability = Math.exp((-1 * delta) / temperature);
         //boolean doSwap = Math.random() < swapProbability;
         boolean doSwap = good && (tile_delta <= 0 && goal_delta <= 0);
+        //System.out.println(doSwap);
         if (doSwap) {
             tile_score = new_tile_score;
             goal_score = new_goal_score;
@@ -412,7 +424,7 @@ public class Main implements GLEventListener, MouseListener, MouseMotionListener
                 for(Mesh.Vert p : new Mesh.Vert[] { t.v1(), t.v2(), t.v3() }) {
                     p.p.glVertex(gl);
                     //p.plus(p.norm().times(p.score()*10)).glVertex(gl);
-                    p.partner().p.glVertex(gl);
+                    //p.partner().p.glVertex(gl);
                     //tile.nearest(p).centroid().glVertex(gl);
                 }