package org.dynmap.utils; import org.dynmap.DynmapLocation; /** * Simple vector class */ public class Vector3D { public double x, y, z; public Vector3D() { x = y = z = 0.0; } public Vector3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } public Vector3D(Vector3D v) { this.x = v.x; this.y = v.y; this.z = v.z; } public final void setFromLocation(DynmapLocation l) { x = l.x; y = l.y; z = l.z; } public final void set(Vector3D v) { x = v.x; y = v.y; z = v.z; } public final void subtract(Vector3D v) { x = x - v.x; y = y - v.y; z = z - v.z; } public final void add(Vector3D v) { x = x + v.x; y = y + v.y; z = z + v.z; } public final double innerProduct(Vector3D v) { return (v.x * x) + (v.y * y) + (v.z * z); } /* this = this X v */ public final void crossProduct(Vector3D v) { double newx = (y*v.z) - (z*v.y); double newy = (z*v.x) - (x*v.z); double newz = (x*v.y) - (y*v.x); x = newx; y = newy; z = newz; } public String toString() { return "{ " + x + ", " + y + ", " + z + " }"; } @Override public boolean equals(Object v) { if (v instanceof Vector3D) { Vector3D vv = (Vector3D) v; return (vv.x == x) && (vv.y == y) && (vv.z == z); } return false; } @Override public int hashCode() { long v = Double.doubleToLongBits(x) ^ Double.doubleToLongBits(y) ^ Double.doubleToLongBits(z); return (int) (v ^ (v >> 32)); } }