X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FTriangle.java;fp=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FTriangle.java;h=18c73a035c173ead9cf409f5f93276efafd1a5cb;hp=df7c463aeed105a22609325fb08e300c20197d95;hb=40b6b99bd4b0bd6041b8ab94a22201faab23ed90;hpb=f9488635746daea6f8ccbb4680ff7f169dc5b2e5 diff --git a/src/edu/berkeley/qfat/geom/Triangle.java b/src/edu/berkeley/qfat/geom/Triangle.java index df7c463..18c73a0 100644 --- a/src/edu/berkeley/qfat/geom/Triangle.java +++ b/src/edu/berkeley/qfat/geom/Triangle.java @@ -1,48 +1,47 @@ package edu.berkeley.qfat.geom; import javax.media.opengl.*; +/** + * an oriented triangle, defined by three points in clockwise order. + */ public abstract class Triangle implements HasBoundingBox { public abstract Point p1(); public abstract Point p2(); public abstract Point p3(); + /** the face normal vector */ public Vec norm() { return p2().minus(p1()).cross(p3().minus(p1())).norm(); } + + /** the area of the triangle */ public float area() { return (float)Math.abs(0.5*p1().distance(p2()) * new Vec(p1(), p2()).norm().dot(new Vec(p2(), p3()))); } + + /** issue gl.glVertex() for each of the triangle's points */ public void glVertices(GL gl) { p1().glVertex(gl); p2().glVertex(gl); p3().glVertex(gl); } + + /** the triangle's centroid */ public Point centroid() { return new Point((p1().x+p2().x+p3().x)/3, (p1().y+p2().y+p3().y)/3, (p1().z+p2().z+p3().z)/3); } - public float diameter() { - // FIXME: what is this supposed to be? - return Math.max(Math.max(p1().distance(p2()), - p2().distance(p3())), - p3().distance(p1())) / 2; - } + /** 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 aspect0() { - float max = Math.max(Math.max(p1().distance(p2()), - p2().distance(p3())), - p3().distance(p1())) / 2; - return (area()/(max*max)); - } public float getMaxX() { return Math.max(p1().x, Math.max(p2().x, p3().x)); } public float getMinX() { return Math.min(p1().x, Math.min(p2().x, p3().x)); }