- double tile_score = tile.score();
- double goal_score = goal.score();
-
- Vec v;
- /*
- Matrix inv = p.errorQuadric();
- v = new Vec(inv.d, inv.h, inv.l).norm().times(1/(float)300);
- if (p.quadric_count == 0) {
- v = goal.nearest(p.p).p.minus(p.p).norm().times(1/(float)300);
- }
- */
- Vec v2 = new Vec((random.nextFloat() - (float)0.5) / 500,
- (random.nextFloat() - (float)0.5) / 500,
- (random.nextFloat() - (float)0.5) / 500);
- //v = v.plus(v2.norm().times(1/(float)300));
- v = v2.norm().times(1/(float)300);
-
- boolean good = p.move(v);
-
- p.reComputeErrorAround();
-
- double new_tile_score = tile.score();
- double new_goal_score = goal.score();
- double tile_delta = (new_tile_score - tile_score) / tile_score;
- double goal_delta = (new_goal_score - goal_score) / goal_score;
+ double tile_error = tile.error();
+ double goal_error = goal.error();
+
+ float max = p.averageEdgeLength()/10;
+ Vec v = new Vec(random.nextFloat(), random.nextFloat(), random.nextFloat());
+ v = v.norm().times((random.nextFloat() - 0.5f) * max);
+ //System.out.println(max + " " + p.averageEdgeLength() + " " + v.mag());
+ Matrix m = Matrix.translate(v);
+
+ boolean good = p.move(m, false);
+ if (!good) { /*misses++;*/ return; }
+
+ double new_tile_error = tile.error();
+ double new_goal_error = goal.error();
+ double tile_delta = (new_tile_error - tile_error) / tile_error;
+ double goal_delta = (new_goal_error - goal_error) / goal_error;