X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2FMain.java;h=2fbd7261b421ef32c5f46cd976d9d0645d715af5;hp=982119bd32fbf9fe050af83ffa47c192d184183f;hb=6fe08d5c50c341f47ded8ce9acd670aad9362614;hpb=e7caf167b9ca619310bb06ccc4a5079605396f22 diff --git a/src/edu/berkeley/qfat/Main.java b/src/edu/berkeley/qfat/Main.java index 982119b..2fbd726 100644 --- a/src/edu/berkeley/qfat/Main.java +++ b/src/edu/berkeley/qfat/Main.java @@ -12,12 +12,40 @@ import edu.berkeley.qfat.geom.Point; // - real anneal // - solve self-intersection problem // - get a better test model? +// - symmetry constraints withing the tile +// - rotation matrices +// - overbinding results in forced equational constraints on the leader +// - shatter in invertd-triforce pattern brian mentioned +// - aspect ratio? non-uniform deformation? +// - rotational alignment + +// - movie-style user interface like +// http://www.coleran.com/markcoleranreell.html ? + +// - consider recasting the Shewchuk predicates in Java? +// http://www.cs.cmu.edu/afs/cs/project/quake/public/code/predicates.c + +/* +blender keys +- middle mouse = option+click +- right mouse = command+click + +3,7,1 = view along axes (control for opp direction) +4, 8, 7, 2 = rotate in discrete increments (+control to translate) +middle trag: rotate space +shift+middle drag: translate space +wheel: zoom +home: home view: take current angle, zoom to whole scnee +5 = ortho vs non-ortho + + */ + // FIXME: re-orient goal (how?) public class Main extends MeshViewer { - public static int verts = 0; + public static int verts = 1; public static final Random random = new Random(); @@ -35,8 +63,10 @@ public class Main extends MeshViewer { Mesh.T t = goal.newT(p0, p1, p2, n, 0); } + goal.ignorecollision = true; + // rotate to align major axis -- this probably needs to be done by a human. - goal.transform(new Matrix(new Vec(0, 0, 1), (float)(Math.PI/2))); + goal.transform(Matrix.rotate(new Vec(0, 0, 1), (float)(Math.PI/2))); float goal_width = goal.diagonal().dot(new Vec(1, 0, 0)); float goal_height = goal.diagonal().dot(new Vec(0, 1, 0)); @@ -47,11 +77,11 @@ public class Main extends MeshViewer { float height = (float)0.08; float depth = (float)0.3; */ - float width = (float)0.6; + float width = (float)0.7; float depth = (float)0.08; - float height = (float)0.3; + float height = (float)0.4; - float rshift = width/2; + float rshift = width/2; float lshift = -(width/2); //float halfup = height/2; @@ -59,21 +89,30 @@ public class Main extends MeshViewer { translations = new Matrix[] { - new Matrix(new Vec(lshift, depth, halfup)), - new Matrix(new Vec(rshift, depth, halfup)), - new Matrix(new Vec(lshift, -depth, halfup)), - new Matrix(new Vec(rshift, -depth, halfup)), + Matrix.translate(new Vec(lshift, depth, halfup)), + Matrix.translate(new Vec(rshift, depth, halfup)), + Matrix.translate(new Vec(lshift, -depth, halfup)), + Matrix.translate(new Vec(rshift, -depth, halfup)), + + /* + Matrix.translate(new Vec(0, depth, halfup)), + Matrix.translate(new Vec(0, -depth, halfup)), + */ + + Matrix.translate(new Vec(lshift, 0, height)), + Matrix.translate(new Vec(rshift, 0, height)), + Matrix.translate(new Vec(lshift, 0, -height)), + Matrix.translate(new Vec(rshift, 0, -height)), - new Matrix(new Vec(lshift, 0, height)), - new Matrix(new Vec(rshift, 0, height)), - new Matrix(new Vec(lshift, 0, -height)), - new Matrix(new Vec(rshift, 0, -height)), - new Matrix(new Vec( width, 0, 0)), - new Matrix(new Vec(-width, 0, 0)), + Matrix.translate(new Vec( width, 0, 0)), + Matrix.translate(new Vec(-width, 0, 0)), }; + // + + Point ltf = new Point(lshift, (depth/2), (height/2)); Point mtf = new Point( 0.0, (depth/2), (height/2)); @@ -200,14 +239,15 @@ public class Main extends MeshViewer { } } - //xMesh.Vert mid = lbf.getE(mbn).shatter(); + //xMesh.Vertex mid = lbf.getE(mbn).shatter(); // rescale to match volume float factor = (float)Math.pow(tile.volume() / goal.volume(), 1.0/3.0); - goal.transform(new Matrix(factor)); + goal.transform(Matrix.scale(factor)); // translate to match centroid - goal.transform(new Matrix(tile.centroid().minus(goal.centroid()))); + goal.transform(Matrix.translate(tile.centroid().minus(goal.centroid()))); + goal.makeVerticesImmutable(); //tx.e2.shatter(); //tx.e3.shatter(); @@ -226,38 +266,46 @@ public class Main extends MeshViewer { tile.score_against = goal; goal.score_against = tile; - tile.tilemesh = true; } public synchronized void breakit() { - if (verts > 800) return; - //while(verts < 800) { + int oldverts = verts; + System.out.println("doubling vertices."); PriorityQueue es = new PriorityQueue(); - for(Mesh.E e : tile.edges()) es.add(e); - for(int i=0; i<8; i++) { + for(Mesh.T t : tile) { + es.add(t.e1()); + es.add(t.e2()); + es.add(t.e3()); + } + for(int i=0; i