
public class Point3D {
    float x, y, z;

    public Point3D() {
    }

    public Point3D(float xval, float yval, float zval) {
        x = xval;
        y = yval;
        z = zval;
    }
    
    public Point3D(Point3D p) {
        copy(p);
    }

  
  public static float dot(Point3D p1, Point3D p2)
  {
    return (p1.x*p2.x + p1.y*p2.y + p1.z*p2.z);
  }
  
  public static Point3D cross(Point3D p1, Point3D p2)
  {
    Point3D p = new Point3D();
    p.x = p1.y*p2.z - p1.z*p2.y;
    p.y = p1.z*p2.x - p1.x*p2.z;
    p.z = p1.x*p2.y - p2.x*p1.y;
    return p;
  }
  
  public void normalize()
  {
    float length = (float) Math.sqrt(dot(this, this));
    x = x/length;
    y = y/length;
    z = z/length;
  }
  
    
    public void copy(Point3D p) {
        x = p.x;
        y = p.y;
        z = p.z;
    }
}

