X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fbind%2FBindingGroup.java;fp=src%2Fedu%2Fberkeley%2Fqfat%2Fbind%2FBindingGroup.java;h=270bc78fb0bcee383ca5561b859c40691d297a16;hp=e93edf86accb46df2c9e86d0c529fdd5ba0ba3b5;hb=60020b251c2dcb17ffeda8b1885fdce19f72c608;hpb=1cfea6e5d6ca9e75578e97d1fdccf2b306af56c4 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); }