package java3d; public class Vector4d { public double x; public double y; public double z; public double w; // コンストラクタ public Vector4d() { x = 0.0; y = 0.0; z = 0.0; w = 0.0; } // コンストラクタ public Vector4d(double px, double py, double pz, double pw) { x = px; y = py; z = pz; w = pw; } public Vector4d(Vector4d v) { x = v.x; y = v.y; z = v.z; w = v.w; } public void set(double x2, double y2, double z2, double w2) { x = x2; y = y2; z = z2; w = w2; } private void set(double[] t) { x = t[0]; y = t[1]; z = t[2]; w = t[3]; } public Vector4d clone() { return new Vector4d(x, y, z, w); } /** 絶対値を返す */ final void absolute() { x = Math.abs(x); y = Math.abs(y); z = Math.abs(z); w = Math.abs(w); } final double angle(Vector4d v1) { double vDot = this.dot(v1) / (this.length() * v1.length()); if (vDot < -1.0) vDot = -1.0; if (vDot > 1.0) vDot = 1.0; return ((double) (Math.acos(vDot))); } public final double dot(Vector4d v1) { return (this.x * v1.x + this.y * v1.y + this.z * v1.z + this.w * v1.w); } public final double length() { return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); } final void clamp(double min, double max) { if (x > max) { x = max; } else if (x < min) { x = min; } if (y > max) { y = max; } else if (y < min) { y = min; } if (z > max) { z = max; } else if (z < min) { z = min; } if (w > max) { w = max; } else if (w < min) { w = min; } } final void clampMax(double max) { if (x > max) x = max; if (y > max) y = max; if (z > max) z = max; if (w > max) w = max; } final void clampMin(double min) { if (x < min) x = min; if (y < min) y = min; if (z < min) z = min; if (w < min) w = min; } final void normalize() { double norm; norm = 1.0 / Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); this.x *= norm; this.y *= norm; this.z *= norm; this.w *= norm; } final void normalize(Vector4d v1) { double norm; norm = 1.0 / Math.sqrt(v1.x * v1.x + v1.y * v1.y + v1.z * v1.z + v1.w * v1.w); this.x = v1.x * norm; this.y = v1.y * norm; this.z = v1.z * norm; this.w = v1.w * norm; } final void get(double[] t) { t[0] = this.x; t[1] = this.y; t[2] = this.z; t[3] = this.w; } public double getX() { return x; } public double getY() { return y; } public double getZ() { return z; } public double getW() { return w; } public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } public void setZ(double z) { this.z = z; } public void setW(double w) { this.w = w; } }