X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FTriangle.java;h=18c73a035c173ead9cf409f5f93276efafd1a5cb;hb=f42953f58e189d611803dcb4661bb840d785c30a;hp=6024e8ff6a4cafbea908b8bfde4903c0893f1abe;hpb=9257c9caa1d47949459343139aace021691e7801;p=anneal.git diff --git a/src/edu/berkeley/qfat/geom/Triangle.java b/src/edu/berkeley/qfat/geom/Triangle.java index 6024e8f..18c73a0 100644 --- a/src/edu/berkeley/qfat/geom/Triangle.java +++ b/src/edu/berkeley/qfat/geom/Triangle.java @@ -1,36 +1,41 @@ package edu.berkeley.qfat.geom; import javax.media.opengl.*; -public abstract class Triangle { +/** + * 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())), @@ -38,4 +43,10 @@ public abstract class Triangle { return 1/(1+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)); } + public float getMaxY() { return Math.max(p1().y, Math.max(p2().y, p3().y)); } + public float getMinY() { return Math.min(p1().y, Math.min(p2().y, p3().y)); } + public float getMaxZ() { return Math.max(p1().z, Math.max(p2().z, p3().z)); } + public float getMinZ() { return Math.min(p1().z, Math.min(p2().z, p3().z)); } } \ No newline at end of file