checkpoint
[anneal.git] / src / edu / berkeley / qfat / geom / Vec.java
index c331d39..0072911 100644 (file)
@@ -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);
+    }
 }