checkpoint
authoradam <adam@megacz.com>
Thu, 20 Dec 2007 19:42:38 +0000 (11:42 -0800)
committeradam <adam@megacz.com>
Thu, 20 Dec 2007 19:42:38 +0000 (11:42 -0800)
darcs-hash:20071220194238-5007d-e8d54190d2f486a44e65df8874ff7fb9c32a2b36.gz

src/edu/berkeley/qfat/Mesh.java
src/edu/berkeley/qfat/geom/BindingGroup.java
src/edu/berkeley/qfat/geom/HasBindingGroup.java

index 34a8de2..57eda26 100644 (file)
@@ -90,6 +90,7 @@ public class Mesh implements Iterable<Mesh.T> {
         private Vertex(Point p) {
             this.p = p;
             this.goodp = p;
         private Vertex(Point p) {
             this.p = p;
             this.goodp = p;
+            this.oldp = p;
             if (vertices.get(p) != null) throw new Error();
             vertices.add(this);
         }
             if (vertices.get(p) != null) throw new Error();
             vertices.add(this);
         }
@@ -154,7 +155,7 @@ public class Mesh implements Iterable<Mesh.T> {
                 if (ang > Math.PI) throw new Error();
                 if (ang < -Math.PI) throw new Error();
                 //float minangle = (float)(Math.PI * 0.8);
                 if (ang > Math.PI) throw new Error();
                 if (ang < -Math.PI) throw new Error();
                 //float minangle = (float)(Math.PI * 0.8);
-                nerror += ((ang / Math.PI)*(ang/Math.PI)) * e.length() * 0.01;
+                nerror += ((ang / Math.PI)*(ang/Math.PI)) * e.length() * 0.05;
                 //System.out.println(((ang / Math.PI)*(ang/Math.PI)) * 0.000001);
                 //if (ang > minangle) nerror += (ang - minangle);
                 /*
                 //System.out.println(((ang / Math.PI)*(ang/Math.PI)) * 0.000001);
                 //if (ang > minangle) nerror += (ang - minangle);
                 /*
@@ -184,7 +185,7 @@ public class Mesh implements Iterable<Mesh.T> {
             if (bindingGroup != null) {
                 Matrix m2 = null;
                 for(int i=0; i<20 && !m.equals(m2); i++) {
             if (bindingGroup != null) {
                 Matrix m2 = null;
                 for(int i=0; i<20 && !m.equals(m2); i++) {
-                    m2 = m.times(bindingGroup.krank);
+                    m2 = m.times(getConstraint());
                     //System.out.println(m.minus(m2));
                 }
                 if (!m.equals(m2)) return true;
                     //System.out.println(m.minus(m2));
                 }
                 if (!m.equals(m2)) return true;
@@ -222,6 +223,7 @@ public class Mesh implements Iterable<Mesh.T> {
             unApplyQuadricToNeighbor();
 
 
             unApplyQuadricToNeighbor();
 
 
+            boolean illegalbefore = illegal;
             illegal = false;
             /*
             if (this.p.minus(newp).mag() > 0.1 && !ignoreProblems) {
             illegal = false;
             /*
             if (this.p.minus(newp).mag() > 0.1 && !ignoreProblems) {
@@ -243,17 +245,17 @@ public class Mesh implements Iterable<Mesh.T> {
             }
             for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next)
                 e.p2.quadricStale = true;
             }
             for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next)
                 e.p2.quadricStale = true;
-            return !illegal;
+            return !illegal || (illegalbefore && illegal);
         } 
 
         public void checkLegality() {
         } 
 
         public void checkLegality() {
-
+            /*
             for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
                 if (Math.abs(e.dihedralAngle()) > (Math.PI * 0.9) ||
                     Math.abs(e.next.dihedralAngle()) > (Math.PI * 0.9)) illegal = true;
                 if (e.t.aspect() < 0.2) illegal = true;
             }
             for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
                 if (Math.abs(e.dihedralAngle()) > (Math.PI * 0.9) ||
                     Math.abs(e.next.dihedralAngle()) > (Math.PI * 0.9)) illegal = true;
                 if (e.t.aspect() < 0.2) illegal = true;
             }
-
+            */
             if (!illegal) triangles.range(oldp, this.p, (Visitor<T>)this);
         }
 
             if (!illegal) triangles.range(oldp, this.p, (Visitor<T>)this);
         }
 
@@ -452,10 +454,10 @@ public class Mesh implements Iterable<Mesh.T> {
                 e.p2.getE(mid).pair.     bindTo(e.getBindingMatrix(firste), firstq);
                 e.p2.getE(mid).pair.pair.bindTo(e.getBindingMatrix(firste), firstq.pair);
             }
                 e.p2.getE(mid).pair.     bindTo(e.getBindingMatrix(firste), firstq);
                 e.p2.getE(mid).pair.pair.bindTo(e.getBindingMatrix(firste), firstq.pair);
             }
-            if (firste.bindingGroup != null)
-                firste.bindingGroup.setKrank(bindingGroup.krank);
-            if (firstq.bindingGroup != null)
-                firstq.bindingGroup.setKrank(bindingGroup.krank);
+            /*
+            first.setConstraint(firste.getConstraint());
+            firstq.setConstraint(firste.getConstraint());
+            */
             return null;
         }
 
             return null;
         }
 
index 7a64af9..0c3049f 100644 (file)
@@ -25,7 +25,7 @@ public class BindingGroup<T extends HasBindingGroup> implements Iterable<T> {
         }
 
         Matrix v = getMatrix(bg.master, master);
         }
 
         Matrix v = getMatrix(bg.master, master);
-        krank = krank.times(v.inverse().times(bg.krank).times(v));
+        //krank = krank.times(v.inverse().times(bg.krank).times(v));
 
         HashSet<HasBindingGroup> stuff = new HashSet<HasBindingGroup>();
         for(HasBindingGroup hbg : bg.matrices.keySet())
 
         HashSet<HasBindingGroup> stuff = new HashSet<HasBindingGroup>();
         for(HasBindingGroup hbg : bg.matrices.keySet())
index 2a44314..65d581f 100644 (file)
@@ -26,11 +26,7 @@ public abstract class HasBindingGroup {
                                 + "; expected "
                                 + getBindingMatrix(other));
             */
                                 + "; expected "
                                 + getBindingMatrix(other));
             */
-            Matrix vom = other.getBindingMatrix(bindingGroup.getMaster());
-            Matrix v2 = bindingMatrix;
-            Matrix v3 = getBindingMatrix(other);
-            Matrix m = vom.inverse().times(v2.inverse()).times(v3).times(vom);
-            bindingGroup.krank = bindingGroup.krank.times(m);
+            setConstraint(bindingMatrix);
             /*
               System.err.println("WARNING: discarding rebind attempt: "+this+" and "+other+m);
             */
             /*
               System.err.println("WARNING: discarding rebind attempt: "+this+" and "+other+m);
             */
@@ -76,11 +72,9 @@ public abstract class HasBindingGroup {
         return v.inverse().times(bindingGroup.krank).times(v);
     }
     public void setConstraint(Matrix m) {
         return v.inverse().times(bindingGroup.krank).times(v);
     }
     public void setConstraint(Matrix m) {
-        /*
         if (bindingGroup==null) bindingGroup = new BindingGroup(this);
         Matrix v = getBindingMatrix(getMaster());
         bindingGroup.krank = bindingGroup.krank.times(v.inverse().times(m).times(v));
         if (bindingGroup==null) bindingGroup = new BindingGroup(this);
         Matrix v = getBindingMatrix(getMaster());
         bindingGroup.krank = bindingGroup.krank.times(v.inverse().times(m).times(v));
-        */
     }
 
     public void unbind() {
     }
 
     public void unbind() {