From: adam Date: Wed, 5 Dec 2007 07:43:36 +0000 (-0800) Subject: checkpoint X-Git-Url: http://git.megacz.com/?p=anneal.git;a=commitdiff_plain;h=23a414f776b1e1a4761e61d159e93476fc168371 checkpoint darcs-hash:20071205074336-5007d-e52dc4a38f524664aade616dcc5ced6898ca1eca.gz --- diff --git a/src/edu/berkeley/qfat/Main.java b/src/edu/berkeley/qfat/Main.java index 0246692..ddb2f97 100644 --- a/src/edu/berkeley/qfat/Main.java +++ b/src/edu/berkeley/qfat/Main.java @@ -162,7 +162,7 @@ public class Main extends MeshViewer { //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)); @@ -186,8 +186,7 @@ public class Main extends MeshViewer { verts++; System.out.println("shatter " + e); e.shatter(); - tile.unbind(); - tile.bind(); + //tile.rebindPoints(); } } diff --git a/src/edu/berkeley/qfat/Mesh.java b/src/edu/berkeley/qfat/Mesh.java index f96346d..eecaad8 100644 --- a/src/edu/berkeley/qfat/Mesh.java +++ b/src/edu/berkeley/qfat/Mesh.java @@ -50,15 +50,14 @@ public class Mesh implements Iterable { 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(); } - } - - public void bind() { + // ask edges to re-implement their bindings for(Mesh.T t : this) { t.e1().dobind(); t.e2().dobind(); @@ -144,8 +143,6 @@ public class Mesh implements Iterable { 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 */ @@ -153,11 +150,13 @@ public class Mesh implements Iterable { /** 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; - boolean inserted = false; public Matrix errorQuadric() { return quadric; } + public Point getPoint() { return p; } + public float score() { return oldscore; } private Matrix fundamentalQuadric = null; public Matrix fundamentalQuadric() { @@ -165,13 +164,11 @@ public class Mesh implements Iterable { 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); } - public float score() { return oldscore; } public void recomputeFundamentalQuadric() { unscore(); @@ -239,13 +236,13 @@ public class Mesh implements Iterable { // 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); - v = v.times(binding); // bleh wrong p = p.bound_to; } while (p != this); return good; @@ -283,6 +280,16 @@ public class Mesh implements Iterable { 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 { @@ -291,7 +298,6 @@ public class Mesh implements Iterable { } 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) { @@ -303,15 +309,6 @@ public class Mesh implements Iterable { 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 */