X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2FMain.java;h=2fbd7261b421ef32c5f46cd976d9d0645d715af5;hp=1f625fb56745fa73a40e9840415ad99ac12dd680;hb=6fe08d5c50c341f47ded8ce9acd670aad9362614;hpb=f9488635746daea6f8ccbb4680ff7f169dc5b2e5 diff --git a/src/edu/berkeley/qfat/Main.java b/src/edu/berkeley/qfat/Main.java index 1f625fb..2fbd726 100644 --- a/src/edu/berkeley/qfat/Main.java +++ b/src/edu/berkeley/qfat/Main.java @@ -66,7 +66,7 @@ public class Main extends MeshViewer { 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)); @@ -89,24 +89,24 @@ 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)), /* - new Matrix(new Vec(0, depth, halfup)), - new Matrix(new Vec(0, -depth, halfup)), + Matrix.translate(new Vec(0, depth, halfup)), + Matrix.translate(new Vec(0, -depth, halfup)), */ - 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)), + 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( width, 0, 0)), - new Matrix(new Vec(-width, 0, 0)), + Matrix.translate(new Vec( width, 0, 0)), + Matrix.translate(new Vec(-width, 0, 0)), }; @@ -239,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(); @@ -265,14 +266,17 @@ public class Main extends MeshViewer { tile.score_against = goal; goal.score_against = tile; - tile.tilemesh = true; } public synchronized void breakit() { int oldverts = verts; System.out.println("doubling vertices."); PriorityQueue es = new PriorityQueue(); - for(Mesh.E e : tile.edges()) es.add(e); + for(Mesh.T t : tile) { + es.add(t.e1()); + es.add(t.e2()); + es.add(t.e3()); + } for(int i=0; i hs = new HashSet(); - for(Mesh.Vert p : tile.vertices()) hs.add(p); - Mesh.Vert[] pts = (Mesh.Vert[])hs.toArray(new Mesh.Vert[0]); + HashSet hs = new HashSet(); + 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<100; i++) { + for(int i=0; i<40; i++) { if (anneal) { count++; - Mesh.Vert v = pts[Math.abs(random.nextInt()) % pts.length]; + Mesh.Vertex v = pts[Math.abs(random.nextInt()) % pts.length]; rand(temp,v); } Thread.yield(); @@ -394,19 +398,21 @@ public class Main extends MeshViewer { System.out.println("temp="+temp + " ratio="+(Math.ceil(ratio*100)) + " " + "points_per_second=" + (count*1000)/((double)(System.currentTimeMillis()-then))); - tile.rebuildPointSet(); - repaint(); - //breakit(); - repaint(); - goal.unApplyQuadricToNeighborAll(); + + for(Mesh.Vertex p : tile.vertices()) p.recomputeFundamentalQuadric(); repaint(); - tile.recomputeAllFundamentalQuadrics(); + for(Mesh.Vertex p : goal.vertices()) p.recomputeFundamentalQuadric(); repaint(); - goal.applyQuadricToNeighborAll(); + + synchronized(safeTriangles) { + safeTriangles.clear(); + for(Mesh.T t : tile) if (t.shouldBeDrawn()) safeTriangles.add(t); + } } } } + public static void main(String[] s) throws Exception { StlFile stlf = new StlFile(); stlf.load("fish.stl");