public final float x, y, z;
public Vec(double x, double y, double z) { this((float)x, (float)y, (float)z); }
public Vec(float x, float y, float z) { this.x = x; this.y = y; this.z = z; }
public Vec(Point p1, Point p2) { this(p2.x-p1.x, p2.y-p1.y, p2.z-p1.z); }
public Vec cross(Vec v) { return new Vec(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x); }
public Vec plus(Vec v) { return new Vec(x+v.x, y+v.y, z+v.z); }
public final float x, y, z;
public Vec(double x, double y, double z) { this((float)x, (float)y, (float)z); }
public Vec(float x, float y, float z) { this.x = x; this.y = y; this.z = z; }
public Vec(Point p1, Point p2) { this(p2.x-p1.x, p2.y-p1.y, p2.z-p1.z); }
public Vec cross(Vec v) { return new Vec(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x); }
public Vec plus(Vec v) { return new Vec(x+v.x, y+v.y, z+v.z); }