- numaspects++;
- aspects += e.t.aspect()*e.t.aspect();
- }
- */
-
- float minangle = (float)(Math.PI * 0.8);
- if (ang > minangle)
- oldscore += (ang - minangle);
-
- e = e.pair.next;
- } while (e != this.e);
- if (numaspects > 0) oldscore += (aspects / numaspects);
-
- //System.out.println(oldscore);
- //oldscore = oldscore*oldscore;
- score += oldscore;
- }
-
- private void removeTrianglesFromRTree() {
- E e = this.e;
- do {
- if (e.t != null) e.t.removeFromRTree();
- e = e.pair.next;
- } while(e != this.e);
- }
- private void addTrianglesToRTree() {
- E e = this.e;
- do {
- if (e.t != null) e.t.addToRTree();
- e = e.pair.next;
- } while(e != this.e);
- }
-
- /** does NOT update bound pairs! */
- public boolean transform(Matrix m) {
- unApplyQuadricToNeighbor();
- Point oldp = this.p;
- try {
- if (vertices.get(this.p)==null) throw new Error();
- vertices.remove(this);
- removeTrianglesFromRTree();
- float newx = m.a*p.x + m.b*p.y + m.c*p.z + m.d;
- float newy = m.e*p.x + m.f*p.y + m.g*p.z + m.h;
- float newz = m.i*p.x + m.j*p.y + m.k*p.z + m.l;
- this.p = new Point(newx, newy, newz);
- addTrianglesToRTree();
- vertices.add(this);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- applyQuadricToNeighbor();
-
- // FIXME: intersection test needed?
- good = true;
-
- // should recompute fundamental quadrics of all vertices sharing a face, but we defer...
- E e = this.e;
- do {
- /*
- if (Math.abs(e.crossAngle()) > (Math.PI * 0.9) ||
- Math.abs(e.next.crossAngle()) > (Math.PI * 0.9)) {
- good = false;
- }
- if (e.t.aspect() < 0.1) {
- good = false;