checkpoint before triforce
authoradam <adam@megacz.com>
Mon, 17 Dec 2007 23:04:25 +0000 (15:04 -0800)
committeradam <adam@megacz.com>
Mon, 17 Dec 2007 23:04:25 +0000 (15:04 -0800)
darcs-hash:20071217230425-5007d-e55aea2e76d4e59f602d5021cedaf5d260d5ce5d.gz

src/edu/berkeley/qfat/Main.java
src/edu/berkeley/qfat/Mesh.java
src/edu/berkeley/qfat/geom/RTree.java

index d085fd9..0c8c271 100644 (file)
@@ -86,12 +86,12 @@ public class Main extends MeshViewer {
         float halfup = 0;
 
         translations = new Matrix[] {
-
+            /*
             Matrix.translate(new Vec(lshift,  depth,    halfup)),
             Matrix.translate(new Vec(rshift,  depth,    halfup)),
             Matrix.translate(new Vec(lshift, -depth,    halfup)),
             Matrix.translate(new Vec(rshift, -depth,    halfup)),
-
+            */
             /*
               Matrix.translate(new Vec(0,  depth,    halfup)),
               Matrix.translate(new Vec(0, -depth,    halfup)),
@@ -267,7 +267,6 @@ public class Main extends MeshViewer {
     }
 
     public void breakit() {
-        /*
         int oldverts = verts;
         System.out.println("doubling vertices.");
         PriorityQueue<Mesh.E> es = new PriorityQueue<Mesh.E>();
@@ -287,7 +286,6 @@ public class Main extends MeshViewer {
             repaint();
         }
         tile.rebindPoints();
-        */
     }
 
     public synchronized void rand(float temp, Mesh.Vertex p) {
@@ -303,7 +301,7 @@ public class Main extends MeshViewer {
         Matrix m = Matrix.translate(v);
 
         boolean good = p.move(m, false);
-        if (!good) { misses++; return; }
+        if (!good) { /*misses++;*/ return; }
 
         double new_tile_error = tile.error();
         double new_goal_error = goal.error();
@@ -319,6 +317,7 @@ public class Main extends MeshViewer {
             goal_error = new_goal_error;
             //System.out.println("error: " + tile_error + " / " + goal_error);
             hits++;
+            p.goodp = p.p;
         } else {
             p.move(Matrix.translate(v.times(-1)), true);
             misses++;
@@ -346,9 +345,9 @@ public class Main extends MeshViewer {
                 if (breaks > 0) {
                     while (breaks>0) {
                         breaks--;
-                        //breakit();
+                        breakit();
                     }
-                    //seek_upward = true;
+                    seek_upward = true;
                 } else if (acceptance > 0.96) gamma = 0.4f;
                 else if (acceptance > 0.9)    gamma = 0.5f;
                 else if (acceptance > 0.8)    gamma = 0.65f;
@@ -357,7 +356,7 @@ public class Main extends MeshViewer {
                 else if (acceptance > 0.15)   gamma = 0.9f;
                 else if (acceptance > 0.05)   gamma = 0.95f;
                 else if (acceptance > 0.01)   gamma = 0.98f;
-                else breaks++;
+                else { /*breaks++;*/ }
 
                 if (seek_upward) {
                     if (acceptance > 0.2) seek_upward = false;
@@ -390,11 +389,11 @@ public class Main extends MeshViewer {
                     for(Mesh.E e : new Mesh.E[] { t.e1(), t.e2(), t.e3() }) {
                         if (e==null) continue;
                         if (e.stretchRatio() > max) es.add(e);
-                        if (t.aspect() < 0.1) es.add(e);
+                        if (t.aspect() < 0.1 && e.length()>e.next.length() && e.length()>e.prev.length()) es.add(e);
                     }
                 }
 
-                for(int i=0; i<1; i++) {
+                for(int i=0; i<5; i++) {
                     Mesh.E e = es.poll();
                     if (e==null) break;
                     e.shatter();
@@ -409,7 +408,9 @@ public class Main extends MeshViewer {
 
                 synchronized(safeTriangles) {
                     safeTriangles.clear();
-                    for(Mesh.T t : tile) if (t.shouldBeDrawn()) safeTriangles.add(t);
+                    for(Mesh.T t : tile) 
+                        if (t.shouldBeDrawn())
+                            safeTriangles.add(t);
                 }
             }
         }
index d395d7f..02f589e 100644 (file)
@@ -75,7 +75,7 @@ public class Mesh implements Iterable<Mesh.T> {
 
     /** a vertex in the mesh */
     public final class Vertex extends HasQuadric implements Visitor {
-        public Point p, oldp;
+        public Point p, oldp, goodp;
         E e;                // some edge *leaving* this point
 
         Matrix binding = Matrix.ONE;
@@ -87,6 +87,7 @@ public class Mesh implements Iterable<Mesh.T> {
 
         private Vertex(Point p) {
             this.p = p;
+            this.goodp = p;
             if (vertices.get(p) != null) throw new Error();
             vertices.add(this);
         }
@@ -141,18 +142,20 @@ public class Mesh implements Iterable<Mesh.T> {
                 ? nearest_in_other_mesh.fundamentalQuadric().preAndPostMultiply(p)
                 : nearest().fundamentalQuadric().preAndPostMultiply(p);
             if (quadric_count != 0)
-                nerror = (/*nerror +*/ quadric.preAndPostMultiply(p))/(quadric_count/*+1*/);
-                /*
+                nerror = (nerror + quadric.preAndPostMultiply(p))/(quadric_count+1);
+
             for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
                 double ang = Math.abs(e.dihedralAngle());
                 if (ang > Math.PI) throw new Error();
                 float minangle = (float)(Math.PI * 0.8);
                 if (ang > minangle) nerror += (ang - minangle);
+                /*
                 if (e.t.aspect() < 0.2) {
-                    nerror += (0.2-e.t.aspect()) * 300;
+                    nerror += (0.2-e.t.aspect()) * 10;
                 }
-            }
                 */
+            }
+
             setError(nerror);
         }
 
@@ -602,10 +605,9 @@ public class Mesh implements Iterable<Mesh.T> {
         public void glVertices(GL gl) {
             if (!shouldBeDrawn()) return;
             norm().glNormal(gl);
-            Point p1 = v1().oldp;
-            Point p2 = v2().oldp;
-            Point p3 = v3().oldp;
-            if (p1==null || p2==null || p3==null) return;
+            Point p1 = v1().goodp;
+            Point p2 = v2().goodp;
+            Point p3 = v3().goodp;
             p1.glVertex(gl);
             p2.glVertex(gl);
             p3.glVertex(gl);
index 2487cc7..57f20c8 100644 (file)
@@ -54,7 +54,6 @@ public class RTree<V extends HasBoundingBox> implements Iterable<V> {
         int id = idi;
         idToV.remove(id);
         vToId.remove(v);
-        rect.set(v.getMinX(), v.getMinY(), v.getMinZ(), v.getMaxX(), v.getMaxY(), v.getMaxZ());
         rtree.delete(vToRect.get(v), id);
         vToRect.remove(v);
     }