translations = new Matrix[] {
- /*
+
Matrix.translate(new Vec(0, 0.2f,0))
- .times(Matrix.rotate(new Vec(0,1,0), (float)( 1*Math.PI/2))),
+ .times(Matrix.rotate(new Vec(0,1,0), (float)(1*Math.PI/2))),
Matrix.translate(new Vec(0,-0.2f,0))
- .times(Matrix.rotate(new Vec(0,1,0), (float)(-1*Math.PI/2))),
+ .times(Matrix.rotate(new Vec(0,1,0), (float)(1*Math.PI/2))),
Matrix.translate(new Vec( 0.2f,0,0))
- .times(Matrix.rotate(new Vec(1,0,0), (float)( 1*Math.PI/2))),
+ .times(Matrix.rotate(new Vec(1,0,0), (float)(-1*Math.PI/2))),
Matrix.translate(new Vec(-0.2f,0,0))
.times(Matrix.rotate(new Vec(1,0,0), (float)(-1*Math.PI/2))),
- */
+ Matrix.rotate(new Vec(0,0,1), (float)(2*Math.PI/2)),
/*
Matrix.rotate(new Vec(0,0,1), (float)(1*Math.PI/2)),
- Matrix.rotate(new Vec(0,0,1), (float)(2*Math.PI/2)),
+
Matrix.rotate(new Vec(0,0,1), (float)(3*Math.PI/2)),
- */
- Matrix.rotate(new Vec(1,0,0), (float)(2*Math.PI/2)),
+ Matrix.rotate(new Vec(1,0,0), (float)(2*Math.PI/2)),
+ */
//Matrix.rotate(new Vec(0,0,1), (float)(2*Math.PI/2)),
//Matrix.scale(1,-1,1),
for(Matrix m2 : translations) {
for(Mesh.T t1 : tile) {
for(Mesh.T t2 : tile) {
- if (t1==t2) continue;
Matrix m = m1.inverse().times(m2);
- if ((t1.v1().p.times(m).minus(t2.v1().p).mag() < MATCHING_EPSILON) &&
- (t1.v2().p.times(m).minus(t2.v3().p).mag() < MATCHING_EPSILON) &&
- (t1.v3().p.times(m).minus(t2.v2().p).mag() < MATCHING_EPSILON)) {
+ if ((t1.v1().p.times(m).distance(t2.v1().p) < MATCHING_EPSILON) &&
+ (t1.v2().p.times(m).distance(t2.v3().p) < MATCHING_EPSILON) &&
+ (t1.v3().p.times(m).distance(t2.v2().p) < MATCHING_EPSILON)) {
t2.e3().bindEdge(t1.e1(), m);
t2.e2().bindEdge(t1.e2(), m);
t2.e1().bindEdge(t1.e3(), m);
}
- if ((t1.v2().p.times(m).minus(t2.v1().p).mag() < MATCHING_EPSILON) &&
- (t1.v3().p.times(m).minus(t2.v3().p).mag() < MATCHING_EPSILON) &&
- (t1.v1().p.times(m).minus(t2.v2().p).mag() < MATCHING_EPSILON)) {
+ if ((t1.v2().p.times(m).distance(t2.v1().p) < MATCHING_EPSILON) &&
+ (t1.v3().p.times(m).distance(t2.v3().p) < MATCHING_EPSILON) &&
+ (t1.v1().p.times(m).distance(t2.v2().p) < MATCHING_EPSILON)) {
t2.e3().bindEdge(t1.e2(), m);
t2.e2().bindEdge(t1.e3(), m);
t2.e1().bindEdge(t1.e1(), m);
}
- if ((t1.v3().p.times(m).minus(t2.v1().p).mag() < MATCHING_EPSILON) &&
- (t1.v1().p.times(m).minus(t2.v3().p).mag() < MATCHING_EPSILON) &&
- (t1.v2().p.times(m).minus(t2.v2().p).mag() < MATCHING_EPSILON)) {
+ if ((t1.v3().p.times(m).distance(t2.v1().p) < MATCHING_EPSILON) &&
+ (t1.v1().p.times(m).distance(t2.v3().p) < MATCHING_EPSILON) &&
+ (t1.v2().p.times(m).distance(t2.v2().p) < MATCHING_EPSILON)) {
t2.e3().bindEdge(t1.e3(), m);
t2.e2().bindEdge(t1.e1(), m);
t2.e1().bindEdge(t1.e2(), m);
}
- if ((t1.v1().p.times(m).minus(t2.v1().p).mag() < MATCHING_EPSILON) &&
- (t1.v2().p.times(m).minus(t2.v2().p).mag() < MATCHING_EPSILON) &&
- (t1.v3().p.times(m).minus(t2.v3().p).mag() < MATCHING_EPSILON)) {
+ if ((t1.v1().p.times(m).distance(t2.v1().p) < MATCHING_EPSILON) &&
+ (t1.v2().p.times(m).distance(t2.v2().p) < MATCHING_EPSILON) &&
+ (t1.v3().p.times(m).distance(t2.v3().p) < MATCHING_EPSILON)) {
t2.e1().bindEdge(t1.e1().pair, m);
t2.e2().bindEdge(t1.e2().pair, m);
t2.e3().bindEdge(t1.e3().pair, m);
}
- if ((t1.v2().p.times(m).minus(t2.v1().p).mag() < MATCHING_EPSILON) &&
- (t1.v3().p.times(m).minus(t2.v2().p).mag() < MATCHING_EPSILON) &&
- (t1.v1().p.times(m).minus(t2.v3().p).mag() < MATCHING_EPSILON)) {
+ if ((t1.v2().p.times(m).distance(t2.v1().p) < MATCHING_EPSILON) &&
+ (t1.v3().p.times(m).distance(t2.v2().p) < MATCHING_EPSILON) &&
+ (t1.v1().p.times(m).distance(t2.v3().p) < MATCHING_EPSILON)) {
t2.e2().bindEdge(t1.e1().pair, m);
t2.e3().bindEdge(t1.e2().pair, m);
t2.e1().bindEdge(t1.e3().pair, m);
}
- if ((t1.v3().p.times(m).minus(t2.v1().p).mag() < MATCHING_EPSILON) &&
- (t1.v1().p.times(m).minus(t2.v2().p).mag() < MATCHING_EPSILON) &&
- (t1.v2().p.times(m).minus(t2.v3().p).mag() < MATCHING_EPSILON)) {
+ if ((t1.v3().p.times(m).distance(t2.v1().p) < MATCHING_EPSILON) &&
+ (t1.v1().p.times(m).distance(t2.v2().p) < MATCHING_EPSILON) &&
+ (t1.v2().p.times(m).distance(t2.v3().p) < MATCHING_EPSILON)) {
t2.e3().bindEdge(t1.e1().pair, m);
t2.e1().bindEdge(t1.e2().pair, m);
t2.e2().bindEdge(t1.e3().pair, m);
float factor = (float)Math.pow(tile.volume() / goal.volume(), 1.0/3.0);
- goal.transform(Matrix.scale(factor/2.4f));
+ goal.transform(Matrix.scale(factor/2.1f));
goal.transform(Matrix.rotate(new Vec(0, 1, 0), (float)(Math.PI/2)));
// translate to match centroid
//System.out.println(v.mag() + " " + max);
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();
p.move(Matrix.translate(v.times(-1)), true);
misses++;
}
+ p.reComputeErrorAround();
}
float hits = 0;
System.out.println("temp="+temp + " ratio="+(Math.ceil(acceptance*100)) + " " +
"points_per_second=" +
(count*1000)/((double)(System.currentTimeMillis()-then)));
- for(Mesh.Vertex p : goal.vertices()) p.recomputeFundamentalQuadricIfNeighborChanged();
+ for(Mesh.Vertex p : goal.vertices()) {
+ p.quadricStale = true;
+ p.recomputeFundamentalQuadricIfNeighborChanged();
+ }
synchronized(safeTriangles) {
safeTriangles.clear();