checkpoint
[anneal.git] / src / edu / berkeley / qfat / Mesh.java
index fe5baf7..be699dd 100644 (file)
@@ -209,45 +209,23 @@ public class Mesh implements Iterable<Mesh.T> {
             oldscore = 0;
         }
         public void computeError() {
-            if (quadric_count == 0) {
-                if (immutableVertices) {
-                } else if (nearest_in_other_mesh == null) {
-                    if (score_against != null) {
-                        Vertex ne = score_against.nearest(p);
-                        oldscore = ne.fundamentalQuadric().preAndPostMultiply(p) * 100 * 10;
-                    } else {
-                        oldscore = 0;
-                    }
-                } else {
-                    oldscore = nearest_in_other_mesh.fundamentalQuadric().preAndPostMultiply(p) * 100 * 10;
-                }
-            } else {
-                oldscore = (quadric.preAndPostMultiply(p) * 100) / quadric_count;
-            }
-
-            oldscore = oldscore;
-
-            int numaspects = 0;
-            float aspects = 0;
+            oldscore =
+                quadric_count != 0
+                ? (quadric.preAndPostMultiply(p) * 100) / quadric_count
+                : immutableVertices
+                ? oldscore
+                : nearest_in_other_mesh != null
+                ? nearest_in_other_mesh.fundamentalQuadric().preAndPostMultiply(p) * 100 * 10
+                : score_against != null
+                ? score_against.nearest(p).fundamentalQuadric().preAndPostMultiply(p) * 100 * 10
+                : 0;
             for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
-                //double ang = Math.abs(e.crossAngle());
                 double ang = Math.abs(e.crossAngle());
                 if (ang > Math.PI) throw new Error();
-                /*
-                  if (e.t != null) {
-                  numaspects++;
-                  aspects += e.t.aspect()*e.t.aspect();
-                  }
-                */
-
                 float minangle = (float)(Math.PI * 0.8);
                 if (ang > minangle)
                     oldscore += (ang - minangle);
-        }
-            if (numaspects > 0) oldscore += (aspects / numaspects);
-
-            //System.out.println(oldscore);
-            //oldscore = oldscore*oldscore;
+            }
             score += oldscore;
         }
 
@@ -321,23 +299,16 @@ public class Mesh implements Iterable<Mesh.T> {
             E ret = getFreeIncident(e, e);
             if (ret != null) return ret;
             ret = getFreeIncident(e.pair.next, e.pair.next);
-            if (ret == null) {
-                E ex = e;
-                do {
-                    System.out.println(ex + " " + ex.t);
-                    ex = ex.pair.next;
-                } while (ex != e);
-                throw new Error("unable to find free incident to " + this);
-            }
-            return ret;
+            if (ret != null) return ret;
+            for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next)
+                System.out.println(e + " " + e.t);
+            throw new Error("unable to find free incident to " + this);
         }
 
         public E getFreeIncident(E start, E before) {
-            E e = start;
-            do {
-                if (e.pair.p2 == this && e.pair.t == null && e.pair.next.t == null) return e.pair;
-                e = e.pair.next;
-            } while(e != before);
+            for(E e = start; e!=null; e=e.pair.next==before?null:e.pair.next)
+                if (e.pair.p2 == this && e.pair.t == null && e.pair.next.t == null)
+                    return e.pair;
             return null;
         }
 
@@ -347,22 +318,16 @@ public class Mesh implements Iterable<Mesh.T> {
             return getE(v);
         }
         public E getE(Vertex p2) {
-            E e = this.e;
-            do {
-                if (e==null) return null;
+            for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next)
                 if (e.p1 == this && e.p2 == p2) return e;
-                e = e.pair.next;
-            } while (e!=this.e);
             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);
+            for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next)
+                if (e.t != null)
+                    norm = norm.plus(e.t.norm().times((float)e.prev.angle()));
             return norm.norm();
         }