X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FTriangle.java;h=fece872cd29201adb49d1ac214a420be463f9f14;hp=9d16661cb79a2eafc2641fd2541288bd2401aaa6;hb=42acb5af8ff15b7af9fa8f34c071ee58e24faf98;hpb=5e1dfbf83814f05b602d6463fca86470531fe4fe diff --git a/src/edu/berkeley/qfat/geom/Triangle.java b/src/edu/berkeley/qfat/geom/Triangle.java index 9d16661..fece872 100644 --- a/src/edu/berkeley/qfat/geom/Triangle.java +++ b/src/edu/berkeley/qfat/geom/Triangle.java @@ -44,13 +44,40 @@ public abstract class Triangle implements HasBoundingBox { } /** ratio of the area of the triangle to that of the square formed from its longest edge */ + /* public float aspect() { float max = Math.max(Math.max(p1().distance(p2()), p2().distance(p3())), p3().distance(p1())) / 2; return 1/(1+area()/(max*max)); } + */ + public float circumcircleRadius() { + double a = p1().distance(p2()); + double b = p2().distance(p3()); + double c = p3().distance(p1()); + return (float)((a*b*c)/Math.sqrt((a+b+c)*(b+c-a)*(c+a-b)*(a+b-c))); + } + + public float shortestEdgeLength() { + float a = p1().distance(p2()); + float b = p2().distance(p3()); + float c = p3().distance(p1()); + return Math.min(a, Math.min(b,c)); + } + + /** a number ranging from 0..1 with 0 being lower quality */ + public float quality() { + float d = shortestEdgeLength(); + float r = circumcircleRadius(); + if (r==0) throw new Error(); + float ret = (float)((d*Math.cos(Math.PI/6))/(r*2)); + if (ret < 0 || ret > 1) throw new Error("ret="+ret); + return ret; + } + + // FIXME: I stole this off the net, and I need to credit whoever wrote it /** decide if the segment from p1-p2 intersects this triangle */ public boolean intersects(Point p1, Point p2) { double A0=p1().x, A1=p1().y, A2=p1().z;