public class Main extends MeshViewer {
+ public static int verts = 0;
+
public static final Random random = new Random();
/** magnification factor */
if ((t1.v1().p.times(m).minus(t2.v1().p).mag() < Mesh.EPSILON) &&
(t1.v2().p.times(m).minus(t2.v3().p).mag() < Mesh.EPSILON) &&
(t1.v3().p.times(m).minus(t2.v2().p).mag() < Mesh.EPSILON)) {
- t1.e1().bind(t2.e3().pair);
- t1.e2().bind(t2.e2().pair);
- t1.e3().bind(t2.e1().pair);
+ t1.e1().bindEdge(t2.e3());
+ t1.e2().bindEdge(t2.e2());
+ t1.e3().bindEdge(t2.e1());
}
if ((t1.v2().p.times(m).minus(t2.v1().p).mag() < Mesh.EPSILON) &&
(t1.v3().p.times(m).minus(t2.v3().p).mag() < Mesh.EPSILON) &&
(t1.v1().p.times(m).minus(t2.v2().p).mag() < Mesh.EPSILON)) {
- t1.e2().bind(t2.e3().pair);
- t1.e3().bind(t2.e2().pair);
- t1.e1().bind(t2.e1().pair);
+ t1.e2().bindEdge(t2.e3());
+ t1.e3().bindEdge(t2.e2());
+ t1.e1().bindEdge(t2.e1());
}
if ((t1.v3().p.times(m).minus(t2.v1().p).mag() < Mesh.EPSILON) &&
(t1.v1().p.times(m).minus(t2.v3().p).mag() < Mesh.EPSILON) &&
(t1.v2().p.times(m).minus(t2.v2().p).mag() < Mesh.EPSILON)) {
- t1.e3().bind(t2.e3().pair);
- t1.e1().bind(t2.e2().pair);
- t1.e2().bind(t2.e1().pair);
+ t1.e3().bindEdge(t2.e3());
+ t1.e1().bindEdge(t2.e2());
+ t1.e2().bindEdge(t2.e1());
}
}
}
}
public synchronized void breakit() {
- if (verts > 50) return;
+ if (verts > 300) return;
PriorityQueue<Mesh.E> es = new PriorityQueue<Mesh.E>();
for(Mesh.E e : tile.edges()) es.add(e);
for(int i=0; i<10; i++) {
Mesh.E e = es.poll();
verts++;
- System.out.println("shatter " + e);
+ //System.out.println("shatter " + e);
e.shatter();
tile.rebindPoints();
}
public synchronized void rand(double temperature, Mesh.Vert p) {
double tile_score = tile.score();
double goal_score = goal.score();
- p.rescore();
+ p.reComputeError();
Vec v = new Vec((random.nextFloat() - (float)0.5) / 1000,
(random.nextFloat() - (float)0.5) / 1000,
}
}
- public static int verts = 0;
-
public void anneal() throws Exception {
int verts = 0;
while(true) {
repaint();
for(Mesh.Vert v : hs) rand(10,v);
}
+ tile.rebuildPointSet();
breakit();
repaint();
- goal.unscoreAll();
+ goal.unApplyQuadricToNeighborAll();
repaint();
tile.recomputeAllFundamentalQuadrics();
repaint();
- goal.rescoreAll();
+ goal.applyQuadricToNeighborAll();
}
}
Main main = new Main(stlf, f);
main.anneal();
}
+
}
\ No newline at end of file