- double ratio = (hits+misses==0) ? 1 : (hits / (hits+misses));
- hits = 0;
- misses = 0;
- float gamma = 0;
- double acceptance = ratio;
- accepts = (int)(Math.ceil(ratio*100));
- temps = (int)(Math.ceil(temp*1000));
- vertss = tile.size();
- if (breaks > 0) { while (breaks>0) {
- breaks--;
- breakit();
- //gamma = 1;
- gamma = 1;
- //temp = last * 0.8f;
- //last = temp;
- //temp = hightemp;
- } } 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.6) gamma = 0.7f;
- else {
- if (acceptance > 0.3) {
- gamma = 0.9f;
- } else if (acceptance > 0.15) {
- gamma = 0.95f;
- } else if (acceptance > 0.10) {
- gamma = 0.98f;
- } else {
- breakit();
- //gamma = 1;
- gamma = 0.99f;
- //gamma = 1;
- //temp = last * 0.8f;
- //last = temp;
- //temp = hightemp;
+ double ratio = (hits+misses==0) ? 1 : (hits / (hits+misses));
+ hits = 0;
+ misses = 0;
+ float gamma = 0;
+ double acceptance = ratio;
+ accepts = (int)(Math.ceil(ratio*100));
+ temps = (int)(Math.ceil(temp*1000));
+ vertss = tile.size();
+ if (breaks > 0) { while (breaks>0) {
+ breaks--;
+ breakit();
+ //gamma = 1;
+ gamma = 1;
+ //temp = last * 0.8f;
+ //last = temp;
+ //temp = hightemp;
+ } } 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.6) gamma = 0.7f;
+ else {
+ if (acceptance > 0.3) {
+ gamma = 0.9f;
+ } else if (acceptance > 0.15) {
+ gamma = 0.95f;
+ } else if (acceptance > 0.10) {
+ gamma = 0.98f;
+ } else {
+ breakit();
+ //gamma = 1;
+ gamma = 0.99f;
+ //gamma = 1;
+ //temp = last * 0.8f;
+ //last = temp;
+ //temp = hightemp;
+ }
+ }
+ temp = temp * gamma;
+
+
+ HashSet<Mesh.Vertex> hs = new HashSet<Mesh.Vertex>();
+ for(Mesh.Vertex p : tile.vertices()) hs.add(p);
+ Mesh.Vertex[] pts = (Mesh.Vertex[])hs.toArray(new Mesh.Vertex[0]);
+
+ int count = 0;
+ long then = System.currentTimeMillis();
+ for(int i=0; i<40; i++) {
+ if (anneal) {
+ count++;
+ Mesh.Vertex v = pts[Math.abs(random.nextInt()) % pts.length];
+ rand(temp,v);
+ v.recomputeFundamentalQuadricIfStale();
+ v.recomputeFundamentalQuadricIfNeighborChanged();
+ }
+ Thread.yield();
+ repaint();