From: adam Date: Mon, 7 Jul 2008 19:18:33 +0000 (-0700) Subject: checkpoint X-Git-Url: http://git.megacz.com/?p=anneal.git;a=commitdiff_plain;h=60020b251c2dcb17ffeda8b1885fdce19f72c608;ds=sidebyside checkpoint darcs-hash:20080707191833-5007d-c5defac839009eef0d5dddb4d5e410c26ecf5c0e.gz --- diff --git a/src/edu/berkeley/qfat/bind/BindingGroup.java b/src/edu/berkeley/qfat/bind/BindingGroup.java index e93edf8..270bc78 100644 --- a/src/edu/berkeley/qfat/bind/BindingGroup.java +++ b/src/edu/berkeley/qfat/bind/BindingGroup.java @@ -22,10 +22,11 @@ class BindingGroup implements Iterable { int size() { return matrices.size(); } /** merge another binding group with this one */ - void merge(BindingGroup bg, Matrix m) { + void merge(BindingGroup bg, Matrix m, float epsilon) { if (bg==this) { - if (m.equalsModuloEpsilon(Matrix.ONE, 0.001f)) return; - constraint = constraint.intersect(m.getAffineConstraint(0.001f), 0.001f); + if (m.equalsModuloEpsilon(Matrix.ONE, epsilon)) return; + // FIXME: what if points do not fall on the merged constraint-line? + constraint = constraint.intersect(m.getAffineConstraint(epsilon), epsilon); return; } @@ -36,15 +37,12 @@ class BindingGroup implements Iterable { // FIXME: what if points do not fall on the merged constraint-line? AffineConstraint ac = bg.constraint.multiply(getMatrix(master, bg.master)); - constraint = constraint.intersect(ac, 0.001f); + constraint = constraint.intersect(ac, epsilon); - HashSet stuff = new HashSet(); - for(HasBindingGroup hbg : bg.matrices.keySet()) - stuff.add(hbg); - bg.matrices.clear(); bg.master = null; - for(HasBindingGroup hbg : stuff) + for(HasBindingGroup hbg : bg.matrices.keySet()) hbg.bindingGroupChanged(); + bg.matrices.clear(); } public Matrix getMatrix(T t) { return matrices.get(t); } diff --git a/src/edu/berkeley/qfat/bind/HasBindingGroup.java b/src/edu/berkeley/qfat/bind/HasBindingGroup.java index ee8157a..1b19310 100644 --- a/src/edu/berkeley/qfat/bind/HasBindingGroup.java +++ b/src/edu/berkeley/qfat/bind/HasBindingGroup.java @@ -14,6 +14,10 @@ public abstract class HasBindingGroup { // therefore: master = bindingGroup[self]^-1 * bindingMatrix * other // therefore: = bindingGroup[self]^-1 * bindingMatrix * other.bindingGroup[other] * other.bindingGroup.master public void bindTo(Matrix bindingMatrix, HasBindingGroup other) { + // FIXME + bindTo(bindingMatrix, other, 0.001f); + } + public void bindTo(Matrix bindingMatrix, HasBindingGroup other, float epsilon) { if (bindingGroup == null) bindingGroup = new BindingGroup(this); if (other.bindingGroup == null) other.bindingGroup = new BindingGroup(other); @@ -21,7 +25,7 @@ public abstract class HasBindingGroup { getBindingMatrix().inverse() .times(bindingMatrix) .times(other.getBindingMatrix()); - other.bindingGroup.merge(bindingGroup, bindingMatrix); + other.bindingGroup.merge(bindingGroup, bindingMatrix, epsilon); } public int bindingGroupSize() {