X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FVec.java;h=007291127ce31c66eb993d1b7900c1b55a74eda5;hp=c331d392fe78d981435822d43cc25e72cee62eed;hb=8333b6805df84244a7524fbdc58e9a6820fb0b6c;hpb=965caa65c5048f85c4335fd4d0f962f8c5ae7012 diff --git a/src/edu/berkeley/qfat/geom/Vec.java b/src/edu/berkeley/qfat/geom/Vec.java index c331d39..0072911 100644 --- a/src/edu/berkeley/qfat/geom/Vec.java +++ b/src/edu/berkeley/qfat/geom/Vec.java @@ -1,4 +1,5 @@ package edu.berkeley.qfat.geom; +import javax.media.opengl.*; /** vector in 3-space; immutable */ public final class Vec { @@ -15,4 +16,19 @@ public final class Vec { public Vec times(float mag) { return new Vec(x*mag, y*mag, z*mag); } public Vec div(float mag) { return new Vec(x/mag, y/mag, z/mag); } public String toString() { return "<"+x+","+y+","+z+">"; } + public void glNormal(GL gl) { gl.glNormal3f(x, y, z); } + + /** fundamental error quadric for the plane with this normal passing through p */ + public Matrix fundamentalQuadric(Point p) { + Vec n = this; + if (mag() != 1) n = norm(); + float a = n.x; + float b = n.y; + float c = n.z; + float d = (-a * p.x) + (-b * p.y) + (-c * p.z); + return new Matrix(a*a, a*b, a*c, a*d, + a*b, b*b, b*c, b*d, + a*c, b*c, c*c, c*d, + a*d, b*d, c*d, d*d); + } }