float halfup = 0;
translations = new Matrix[] {
-
+ /*
Matrix.translate(new Vec(lshift, depth, halfup)),
Matrix.translate(new Vec(rshift, depth, halfup)),
Matrix.translate(new Vec(lshift, -depth, halfup)),
Matrix.translate(new Vec(rshift, -depth, halfup)),
-
+ */
/*
Matrix.translate(new Vec(0, depth, halfup)),
Matrix.translate(new Vec(0, -depth, halfup)),
}
public void breakit() {
- /*
int oldverts = verts;
System.out.println("doubling vertices.");
PriorityQueue<Mesh.E> es = new PriorityQueue<Mesh.E>();
repaint();
}
tile.rebindPoints();
- */
}
public synchronized void rand(float temp, Mesh.Vertex p) {
Matrix m = Matrix.translate(v);
boolean good = p.move(m, false);
- if (!good) { misses++; return; }
+ if (!good) { /*misses++;*/ return; }
double new_tile_error = tile.error();
double new_goal_error = goal.error();
goal_error = new_goal_error;
//System.out.println("error: " + tile_error + " / " + goal_error);
hits++;
+ p.goodp = p.p;
} else {
p.move(Matrix.translate(v.times(-1)), true);
misses++;
if (breaks > 0) {
while (breaks>0) {
breaks--;
- //breakit();
+ breakit();
}
- //seek_upward = true;
+ seek_upward = true;
} else if (acceptance > 0.96) gamma = 0.4f;
else if (acceptance > 0.9) gamma = 0.5f;
else if (acceptance > 0.8) gamma = 0.65f;
else if (acceptance > 0.15) gamma = 0.9f;
else if (acceptance > 0.05) gamma = 0.95f;
else if (acceptance > 0.01) gamma = 0.98f;
- else breaks++;
+ else { /*breaks++;*/ }
if (seek_upward) {
if (acceptance > 0.2) seek_upward = false;
for(Mesh.E e : new Mesh.E[] { t.e1(), t.e2(), t.e3() }) {
if (e==null) continue;
if (e.stretchRatio() > max) es.add(e);
- if (t.aspect() < 0.1) es.add(e);
+ if (t.aspect() < 0.1 && e.length()>e.next.length() && e.length()>e.prev.length()) es.add(e);
}
}
- for(int i=0; i<1; i++) {
+ for(int i=0; i<5; i++) {
Mesh.E e = es.poll();
if (e==null) break;
e.shatter();
synchronized(safeTriangles) {
safeTriangles.clear();
- for(Mesh.T t : tile) if (t.shouldBeDrawn()) safeTriangles.add(t);
+ for(Mesh.T t : tile)
+ if (t.shouldBeDrawn())
+ safeTriangles.add(t);
}
}
}
/** a vertex in the mesh */
public final class Vertex extends HasQuadric implements Visitor {
- public Point p, oldp;
+ public Point p, oldp, goodp;
E e; // some edge *leaving* this point
Matrix binding = Matrix.ONE;
private Vertex(Point p) {
this.p = p;
+ this.goodp = p;
if (vertices.get(p) != null) throw new Error();
vertices.add(this);
}
? nearest_in_other_mesh.fundamentalQuadric().preAndPostMultiply(p)
: nearest().fundamentalQuadric().preAndPostMultiply(p);
if (quadric_count != 0)
- nerror = (/*nerror +*/ quadric.preAndPostMultiply(p))/(quadric_count/*+1*/);
- /*
+ nerror = (nerror + quadric.preAndPostMultiply(p))/(quadric_count+1);
+
for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
double ang = Math.abs(e.dihedralAngle());
if (ang > Math.PI) throw new Error();
float minangle = (float)(Math.PI * 0.8);
if (ang > minangle) nerror += (ang - minangle);
+ /*
if (e.t.aspect() < 0.2) {
- nerror += (0.2-e.t.aspect()) * 300;
+ nerror += (0.2-e.t.aspect()) * 10;
}
- }
*/
+ }
+
setError(nerror);
}
public void glVertices(GL gl) {
if (!shouldBeDrawn()) return;
norm().glNormal(gl);
- Point p1 = v1().oldp;
- Point p2 = v2().oldp;
- Point p3 = v3().oldp;
- if (p1==null || p2==null || p3==null) return;
+ Point p1 = v1().goodp;
+ Point p2 = v2().goodp;
+ Point p3 = v3().goodp;
p1.glVertex(gl);
p2.glVertex(gl);
p3.glVertex(gl);