package Geometry; public class Vector3 { public Vector3() { xyz[0] = 0; xyz[1] = 0; xyz[2] = 0; } public Vector3(double x, double y, double z) { xyz[0] = x; xyz[1] = y; xyz[2] = z; } public double[] array() { return (double[])xyz.clone(); } public Vector3 add(Vector3 rhs) { return new Vector3( xyz[0] + rhs.xyz[0], xyz[1] + rhs.xyz[1], xyz[2] + rhs.xyz[2] ); } public Vector3 sub(Vector3 rhs) { return new Vector3( xyz[0] - rhs.xyz[0], xyz[1] - rhs.xyz[1], xyz[2] - rhs.xyz[2] ); } public Vector3 neg() { return new Vector3(-xyz[0], -xyz[1], -xyz[2]); } public Vector3 mul(double c) { return new Vector3(c*xyz[0], c*xyz[1], c*xyz[2]); } public Vector3 div(double c) { return new Vector3(xyz[0]/c, xyz[1]/c, xyz[2]/c); } public double dot(Vector3 rhs) { return xyz[0]*rhs.xyz[0] + xyz[1]*rhs.xyz[1] + xyz[2]*rhs.xyz[2]; } public Vector3 cross(Vector3 rhs) { return new Vector3( xyz[1]*rhs.xyz[2] - xyz[2]*rhs.xyz[1], xyz[0]*rhs.xyz[2] - xyz[2]*rhs.xyz[0], xyz[0]*rhs.xyz[1] - xyz[1]*rhs.xyz[0] ); } public double norm() { return dot(this); } public Vector3 normalize() { return this.div(norm()); } /*package*/ double xyz[] = new double[3]; }