checkpoint
authoradam <adam@megacz.com>
Wed, 5 Dec 2007 07:43:36 +0000 (23:43 -0800)
committeradam <adam@megacz.com>
Wed, 5 Dec 2007 07:43:36 +0000 (23:43 -0800)
darcs-hash:20071205074336-5007d-e52dc4a38f524664aade616dcc5ced6898ca1eca.gz

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

index 0246692..ddb2f97 100644 (file)
@@ -162,7 +162,7 @@ public class Main extends MeshViewer {
         //tx.e3.shatter();
 
 
         //tx.e3.shatter();
 
 
-        tile.bind();
+        tile.rebindPoints();
 
         //mid.move(new Vec((float)0,0,(float)-0.05));
         //ltn.move(new Vec((float)0,0,(float)-0.05));
 
         //mid.move(new Vec((float)0,0,(float)-0.05));
         //ltn.move(new Vec((float)0,0,(float)-0.05));
@@ -186,8 +186,7 @@ public class Main extends MeshViewer {
             verts++;
             System.out.println("shatter " + e);
             e.shatter();
             verts++;
             System.out.println("shatter " + e);
             e.shatter();
-            tile.unbind();
-            tile.bind();
+            //tile.rebindPoints();
         }
     }
 
         }
     }
 
index f96346d..eecaad8 100644 (file)
@@ -50,15 +50,14 @@ public class Mesh implements Iterable<Mesh.T> {
     public int numedges = 0;
     public float avgedge = 0;
 
     public int numedges = 0;
     public float avgedge = 0;
 
-    public void unbind() {
+    public void rebindPoints() {
+        // unbind all points
         for(Mesh.T t : this) {
             t.v1().unbind();
             t.v2().unbind();
             t.v3().unbind();
         }
         for(Mesh.T t : this) {
             t.v1().unbind();
             t.v2().unbind();
             t.v3().unbind();
         }
-    }
-
-    public void bind() {
+        // ask edges to re-implement their bindings
         for(Mesh.T t : this) {
             t.e1().dobind();
             t.e2().dobind();
         for(Mesh.T t : this) {
             t.e1().dobind();
             t.e2().dobind();
@@ -144,8 +143,6 @@ public class Mesh implements Iterable<Mesh.T> {
         public Point p;
         E e;                // some edge *leaving* this point
 
         public Point p;
         E e;                // some edge *leaving* this point
 
-        Vert bound_to = this;
-
         /** the nearest vertex in the "score_against" mesh */
         Vert   nearest_in_other_mesh;
         /** the number of vertices in the other mesh for which this is the nearest_in_other_mesh */
         /** the nearest vertex in the "score_against" mesh */
         Vert   nearest_in_other_mesh;
         /** the number of vertices in the other mesh for which this is the nearest_in_other_mesh */
@@ -153,11 +150,13 @@ public class Mesh implements Iterable<Mesh.T> {
         /** the total error quadric (contributions from all vertices in other mesh for which this is nearest) */
         Matrix quadric = Matrix.ZERO;
 
         /** the total error quadric (contributions from all vertices in other mesh for which this is nearest) */
         Matrix quadric = Matrix.ZERO;
 
+        Vert bound_to = this;
         Matrix binding = new Matrix();
         float oldscore = 0;
         Matrix binding = new Matrix();
         float oldscore = 0;
-        boolean inserted = false;
 
         public Matrix errorQuadric() { return quadric; }
 
         public Matrix errorQuadric() { return quadric; }
+        public Point getPoint() { return p; }
+        public float score() { return oldscore; }
 
         private Matrix fundamentalQuadric = null;
         public Matrix fundamentalQuadric() {
 
         private Matrix fundamentalQuadric = null;
         public Matrix fundamentalQuadric() {
@@ -165,13 +164,11 @@ public class Mesh implements Iterable<Mesh.T> {
             return fundamentalQuadric;
         }
 
             return fundamentalQuadric;
         }
 
-        public Point getPoint() { return p; }
         private Vert(Point p) {
             this.p = p;
             if (pointset.get(p) != null) throw new Error();
             pointset.add(this);
         }
         private Vert(Point p) {
             this.p = p;
             if (pointset.get(p) != null) throw new Error();
             pointset.add(this);
         }
-        public float score() { return oldscore; }
 
         public void recomputeFundamentalQuadric() {
             unscore();
 
         public void recomputeFundamentalQuadric() {
             unscore();
@@ -239,13 +236,13 @@ public class Mesh implements Iterable<Mesh.T> {
             // FIXME: intersection test needed?
             return true;
         }
             // FIXME: intersection test needed?
             return true;
         }
+
         public boolean move(Vec v) {
             Matrix m = new Matrix(v);
             Vert p = this;
             boolean good = true;
             do {
                 good &= p.transform(m);
         public boolean move(Vec v) {
             Matrix m = new Matrix(v);
             Vert p = this;
             boolean good = true;
             do {
                 good &= p.transform(m);
-                v = v.times(binding); // bleh wrong
                 p = p.bound_to;
             } while (p != this);
             return good;
                 p = p.bound_to;
             } while (p != this);
             return good;
@@ -283,6 +280,16 @@ public class Mesh implements Iterable<Mesh.T> {
             return null;
         }
 
             return null;
         }
 
+        public Vec norm() {
+            Vec norm = new Vec(0, 0, 0);
+            E e = this.e;
+            do {
+                if (e.t != null) norm = norm.plus(e.t.norm().times((float)e.prev.angle()));
+                e = e.pair.next;
+            } while(e != this.e);
+            return norm.norm();
+        }
+
         public boolean isBoundTo(Vert p) {
             Vert px = p;
             do {
         public boolean isBoundTo(Vert p) {
             Vert px = p;
             do {
@@ -291,7 +298,6 @@ public class Mesh implements Iterable<Mesh.T> {
             } while(px != p);
             return false;
         }
             } while(px != p);
             return false;
         }
-
         public void unbind() { bound_to = this; binding = new Matrix(); }
         public void bind(Vert p) { bind(p, new Matrix()); }
         public void bind(Vert p, Matrix binding) {
         public void unbind() { bound_to = this; binding = new Matrix(); }
         public void bind(Vert p) { bind(p, new Matrix()); }
         public void bind(Vert p, Matrix binding) {
@@ -303,15 +309,6 @@ public class Mesh implements Iterable<Mesh.T> {
             this.bound_to = temp_bound_to;
             this.binding = temp_binding.times(temp_binding); // FIXME: may have order wrong here
         }
             this.bound_to = temp_bound_to;
             this.binding = temp_binding.times(temp_binding); // FIXME: may have order wrong here
         }
-        public Vec norm() {
-            Vec norm = new Vec(0, 0, 0);
-            E e = this.e;
-            do {
-                if (e.t != null) norm = norm.plus(e.t.norm().times((float)e.prev.angle()));
-                e = e.pair.next;
-            } while(e != this.e);
-            return norm.norm();
-        }
     }
 
     /** [UNIQUE] an edge */
     }
 
     /** [UNIQUE] an edge */