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 (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);
/*
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;
unApplyQuadricToNeighbor();
+ boolean illegalbefore = illegal;
illegal = false;
/*
if (this.p.minus(newp).mag() > 0.1 && !ignoreProblems) {
}
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() {
-
+ /*
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);
}
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;
}
+ "; 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);
*/
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));
- */
}
public void unbind() {