checkpoint
[anneal.git] / src / edu / berkeley / qfat / Main.java
index b7df3d4..178ca5a 100644 (file)
@@ -170,48 +170,51 @@ public class Main extends InteractiveMeshViewer {
                         Point t1v1 = m.times(t1.v1().p);
                         Point t1v2 = m.times(t1.v2().p);
                         Point t1v3 = m.times(t1.v3().p);
+
                         if (t1v1.distance(t2.v1().p) < MATCHING_EPSILON &&
                             t1v2.distance(t2.v3().p) < MATCHING_EPSILON &&
                             t1v3.distance(t2.v2().p) < MATCHING_EPSILON) {
-                            t2.e3().bindEdge(t1.e1(), m);
-                            t2.e2().bindEdge(t1.e2(), m);
-                            t2.e1().bindEdge(t1.e3(), m);
+                            t2.e3().bindEdge(t1.e1().pair, m);
+                            t2.e2().bindEdge(t1.e2().pair, m);
+                            t2.e1().bindEdge(t1.e3().pair, m);
                         }
                         if (t1v2.distance(t2.v1().p) < MATCHING_EPSILON &&
                             t1v3.distance(t2.v3().p) < MATCHING_EPSILON &&
                             t1v1.distance(t2.v2().p) < MATCHING_EPSILON) {
-                            t2.e3().bindEdge(t1.e2(), m);
-                            t2.e2().bindEdge(t1.e3(), m);
-                            t2.e1().bindEdge(t1.e1(), m);
+                            t2.e3().bindEdge(t1.e2().pair, m);
+                            t2.e2().bindEdge(t1.e3().pair, m);
+                            t2.e1().bindEdge(t1.e1().pair, m);
                         }
                         if (t1v3.distance(t2.v1().p) < MATCHING_EPSILON &&
                             t1v1.distance(t2.v3().p) < MATCHING_EPSILON &&
                             t1v2.distance(t2.v2().p) < MATCHING_EPSILON) {
-                            t2.e3().bindEdge(t1.e3(), m);
-                            t2.e2().bindEdge(t1.e1(), m);
-                            t2.e1().bindEdge(t1.e2(), m);
+                            t2.e3().bindEdge(t1.e3().pair, m);
+                            t2.e2().bindEdge(t1.e1().pair, m);
+                            t2.e1().bindEdge(t1.e2().pair, m);
                         }
+
                         if (t1v1.distance(t2.v1().p) < MATCHING_EPSILON &&
                             t1v2.distance(t2.v2().p) < MATCHING_EPSILON &&
                             t1v3.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);
+                            t2.e1().bindEdge(t1.e1(), m);
+                            t2.e2().bindEdge(t1.e2(), m);
+                            t2.e3().bindEdge(t1.e3(), m);
                         }
                         if (t1v2.distance(t2.v1().p) < MATCHING_EPSILON &&
                             t1v3.distance(t2.v2().p) < MATCHING_EPSILON &&
                             t1v1.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);
+                            t2.e2().bindEdge(t1.e1(), m);
+                            t2.e3().bindEdge(t1.e2(), m);
+                            t2.e1().bindEdge(t1.e3(), m);
                         }
                         if (t1v3.distance(t2.v1().p) < MATCHING_EPSILON &&
                             t1v1.distance(t2.v2().p) < MATCHING_EPSILON &&
                             t1v2.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);
+                            t2.e3().bindEdge(t1.e1(), m);
+                            t2.e1().bindEdge(t1.e2(), m);
+                            t2.e2().bindEdge(t1.e3(), m);
                         }
+
                     }
                 }
             }
@@ -574,6 +577,7 @@ public class Main extends InteractiveMeshViewer {
                 generateTile(transforms, tile);
                 fixupTile();
             } });
+
             tileMenu.add(new MyMenuItem("Slim Dense Packing (Cubic)") { public void hit() {
                 setTile(new Mesh(false));
                 float unit = 0.4f;
@@ -585,6 +589,10 @@ public class Main extends InteractiveMeshViewer {
                 float height = 2*r*(float)Math.sqrt(2f/3f);
 
                 transforms = new Matrix[] {
+
+                    //Matrix.rotate(new Vec(1,0,0), (float)Math.PI),
+                    //Matrix.reflect(new Vec(1,0,0)),
+
                     Matrix.translate(new Vec(-unit, 0, 0)),
                     Matrix.translate(new Vec( unit, 0, 0)),
                     Matrix.translate(new Vec(-cos,  0,  sin)),
@@ -592,6 +600,13 @@ public class Main extends InteractiveMeshViewer {
                     Matrix.translate(new Vec(-cos,  0, -sin)),
                     Matrix.translate(new Vec( cos,  0, -sin)),
 
+                    Matrix.translate(new Vec( 0,  height, -z)),
+                    Matrix.translate(new Vec(-r,  height,  x)),
+                    Matrix.translate(new Vec( r,  height,  x)),
+                    Matrix.translate(new Vec( 0, -height,  z)),
+                    Matrix.translate(new Vec(-r, -height, -x)),
+                    Matrix.translate(new Vec( r, -height, -x)),
+
                     /*
                     Matrix.translate(new Vec( 0,  height, -z)).times(Matrix.rotate(new Vec(0,1,0), (float)Math.PI)),
                     Matrix.translate(new Vec(-r,  height,  x)).times(Matrix.rotate(new Vec(0,1,0), (float)Math.PI)),
@@ -601,14 +616,6 @@ public class Main extends InteractiveMeshViewer {
                     Matrix.translate(new Vec( r, -height,  x)).times(Matrix.rotate(new Vec(0,1,0), (float)Math.PI)),
                     */
 
-                    Matrix.translate(new Vec( 0,  height, -z)),
-                    Matrix.translate(new Vec(-r,  height,  x)),
-                    Matrix.translate(new Vec( r,  height,  x)),
-                    Matrix.translate(new Vec( 0, -height,  z)),
-                    Matrix.translate(new Vec(-r, -height, -x)),
-                    Matrix.translate(new Vec( r, -height, -x)),
-                    //Matrix.rotate(new Vec(0,0,1), (float)Math.PI),
-
                     /*
                     Matrix.translate(new Vec( 0,  height, -z)).times(Matrix.scale(-1,1,-1)),
                     Matrix.translate(new Vec(-r,  height,  x)).times(Matrix.scale(-1,1,-1)),
@@ -620,12 +627,23 @@ public class Main extends InteractiveMeshViewer {
                     Matrix.ONE
                 };
                 generateTile(transforms, tile);
+
+
+                transforms = new Matrix[] {
+                    Matrix.reflect(new Vec( 0,  height, -z).norm()),
+                    //Matrix.reflect(new Vec( 0, -height,  z)),
+                    Matrix.ONE
+                };
+
                 //for(int i=0; i<transforms.length; i++) transforms[i] = Matrix.translate(m.times(vecs[i]));
+                /*
                 Matrix m = Matrix.scale(1.9f, 1f ,1);
                 //Matrix m = Matrix.scale(1f, 2.1f, 1f);
                 tile.transform(m);
                 for(int i=0; i<transforms.length; i++)
                     transforms[i] = preMultiplyTranslationalComponentBy(transforms[i], m);
+                */
+
                 fixupTile();
 
             } });