

class Vector3 {
  public float x,y,z;

  Vector3(float x, float y, float z) {
    this.x = x;
    this.y = y;
    this.z = z;
  }


  public Vector3 crossProd(Vector3 v2) {
    //    return new Vector3(x*v2.x, y*v2.y, z*v2.z);
    return new Vector3(y*v2.z-z*v2.y, z*v2.x-x*v2.z, x*v2.y-y*v2.x);
  }

  public float dotProd(Vector3 v2) {
    return v2.x*x + v2.y*y + v2.z*z;
  }

  public Vector3 add(Vector3 v2) {
    return new Vector3(x+v2.x, y+v2.y, z+v2.z);
  }

  public Vector3 subtract(Vector3 v2) {
    return new Vector3(x-v2.x, y-v2.y, z-v2.z);
  }

  public Vector3 times(float val) {
    return new Vector3(val*x, val*y, val*z);
  }

  public void normalize() {
    float factor = (float)Math.sqrt(x*x + y*y + z*z);
   
    x = (x == 0 ? 0 : x/factor);
    y = (y == 0 ? 0 : y/factor);
    z = (z == 0 ? 0 : z/factor);
  }

  public String toString() {
    String s = new String();
    s = "Vector:  [ " + x + " " + y + " " + z + " ]";
    return s;
  }

  

}

