X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FPolygon.java;h=ff75939ff92abda6af5fa85150ec24f7ebf02e0e;hp=e2d3bc55e4ce6e43ca05ea9806eed137a4ad241e;hb=5f15a6155bf7fbf2d62b3ab9fd992a54af10a95a;hpb=4c6451ef747ae7ffc2aa8955e55254673ac49d16 diff --git a/src/edu/berkeley/qfat/geom/Polygon.java b/src/edu/berkeley/qfat/geom/Polygon.java index e2d3bc5..ff75939 100644 --- a/src/edu/berkeley/qfat/geom/Polygon.java +++ b/src/edu/berkeley/qfat/geom/Polygon.java @@ -25,6 +25,10 @@ public final class Polygon { return new Polygon(plane, newHalfSpaces); } + private static final float EPSILON = 0.00001f; + private static float round(float f) { + return Math.round(f*1000)/1000f; + } public Triangle[] tesselate(Mesh mesh) { // FIXME: check for closedness // find a starting point @@ -36,18 +40,21 @@ public final class Polygon { if (i==j) continue; Point p = plane.intersect(halfSpaces[i], halfSpaces[j]); if (p==null) continue; + + //p = new Point(round(p.x), round(p.y), round(p.z)); + for(int k=0; kEPSILON) p2 = p; } + else if (p.distance(p1)>EPSILON && p.distance(p2)>EPSILON) throw new Error("three points! " + p + " " + p1 + " " + p2); } } if (p1!=null && p2!=null) { - System.out.println("new segment: " + p1 + " " + p2); + //System.out.println("new segment: " + p1 + " " + p2); segments.add(new Segment(p1, p2)); } } @@ -55,6 +62,8 @@ public final class Polygon { for(Segment s : segments) cen = cen.plus(s.p1.minus(Point.ORIGIN)).plus(s.p2.minus(Point.ORIGIN)); Point centroid = Point.ORIGIN.plus(cen.times(1f/(2*segments.size()))); + //centroid = new Point(round(centroid.x), round(centroid.y), round(centroid.z)); + if (segments.size() >= 3) for(Segment s : segments) { System.out.println("newt! " + s.p1 + " " + centroid + " " + s.p2 + " " + plane.norm.times(-1)); mesh.newT(s.p1, centroid, s.p2, plane.norm.times(-1), 0);