X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FBindingGroup.java;h=7a64af96a5d1ab50f755b54e077d28d54f6bafb2;hb=78303bd63882bf70a079f25874a8ff78fa0f652c;hp=d1ff8b8f570ebd860c037feca5b02ba547fbeb59;hpb=468b086402bb0ccae7ce4dda8b009d61bfc37a71;p=anneal.git diff --git a/src/edu/berkeley/qfat/geom/BindingGroup.java b/src/edu/berkeley/qfat/geom/BindingGroup.java index d1ff8b8..7a64af9 100644 --- a/src/edu/berkeley/qfat/geom/BindingGroup.java +++ b/src/edu/berkeley/qfat/geom/BindingGroup.java @@ -4,6 +4,8 @@ import java.util.*; public class BindingGroup implements Iterable { + public Matrix krank = Matrix.ONE; + private T master = null; private HashMap matrices = new HashMap(); @@ -12,15 +14,26 @@ public class BindingGroup implements Iterable { matrices.put(master, Matrix.ONE); } + public int size() { return matrices.size(); } + + public void setKrank(Matrix k) { krank = krank.times(k); } public void merge(BindingGroup bg, Matrix m) { + if (bg==this) throw new Error(); for(HasBindingGroup hbg : bg.matrices.keySet()) { matrices.put((T)hbg, bg.matrices.get(hbg).times(m)); hbg.bindingGroup = this; } + + Matrix v = getMatrix(bg.master, master); + krank = krank.times(v.inverse().times(bg.krank).times(v)); + + HashSet stuff = new HashSet(); for(HasBindingGroup hbg : bg.matrices.keySet()) - hbg.bindingGroupChanged(this); + stuff.add(hbg); bg.matrices.clear(); bg.master = null; + for(HasBindingGroup hbg : stuff) + hbg.bindingGroupChanged(this); } public T getMaster() { return master; }