import Vertex3D;

class PlaneEqn {

  // variables
  public float A, B, C, D;
  public float mag;
        
  public PlaneEqn() {
  }

  public PlaneEqn(Vertex3D p1, Vertex3D p2, Vertex3D p3) {
    A = p1.y * (p2.z - p3.z) + p2.y * (p3.z - p1.z) + p3.y * (p1.z - p2.z);
    B = p1.z * (p2.x - p3.x) + p2.z * (p3.x - p1.x) + p3.z * (p1.x - p2.x);
    C = p1.x * (p2.y - p3.y) + p2.x * (p3.y - p1.y) + p3.x * (p1.y - p2.y);
    D = -1 * (p1.x * (p2.y * p3.z - p3.y * p2.z) + 
	      p2.x * (p3.y * p1.z - p1.y * p3.z) +
	      p3.x * (p1.y * p2.z - p2.y * p1.z));
    mag = (float) java.lang.Math.sqrt(A * A + B * B + C * C);
  }

  public PlaneEqn(float nx, float ny, float nz, Vertex3D p) {
    A = nx;
    B = ny;
    C = nz;
    D = -1 * (nx * p.x + ny * p.y + nz * p.z);
    mag = (float) java.lang.Math.sqrt(A * A + B * B + C * C);
  }

  // methods

  public float eval(Point3D p) {
    return (A * p.x + B * p.y + C * p.z + D);
  }

}
