package java3d; public class Vector3f { public float x; public float y; public float z; // コンストラクタ public Vector3f() { x = 0.0f; y = 0.0f; z = 0.0f; } // コンストラクタ public Vector3f(float px, float py, float pz) { x = px; y = py; z = pz; } public Vector3f(Vector3f v) { x = v.x; y = v.y; z = v.z; } public Vector3f clone() { return new Vector3f(this.x, this.y, this.z); } public double dot(Vector3f a) { return x*a.x + y*a.y + z*a.z; } public void cross(Vector3f a, Vector3f b) { float x = a.y*b.z - a.z*b.y; float y = a.z*b.x - a.x*b.z; float z = a.x*b.y - a.y*b.x; this.x = x; this.y = y; this.z = z; } public float length() { return (float)Math.sqrt(x*x + y*y + z*z); } public void scale(float s) {; x = x*s; y = y*s; z = z*s; } public void normalize() { float l = length(); x = x / l; y = y / l; z = z / l; } /** v1とv2の和を格納する */ public void add(Vector3f v1, Vector3f v2) { this.x = v1.x + v2.x; this.y = v1.y + v2.y; this.z = v1.z + v2.z; } /** v1との和を格納する */ public void add(Vector3f v1) { this.x += v1.x; this.y += v1.y; this.z += v1.z; } /** v1とv2の差を格納する */ public void sub(Vector3f v1, Vector3f v2) { this.x = v1.x - v2.x; this.y = v1.y - v2.y; this.z = v1.z - v2.z; } /** v1との差を格納する */ public void sub(Vector3f v1) { this.x -= v1.x; this.y -= v1.y; this.z -= v1.z; } /** Vector3dをセットする */ public void set(Vector3f v) { this.x = v.x; this.y = v.y; this.z = v.z; } /** 符号を反転する */ public void negate() { this.x = -x; this.y = -y; this.z = -z; } /** this = d * axis + p */ public void scaleAdd(float d, Vector3f axis, Vector3f p) { this.x = d * axis.x + p.x; this.y = d * axis.y + p.y; this.z = d * axis.z + p.z; } public void setX(float x) { this.x = x; } public void setY(float y) { this.y = y; } public void setZ(float z) { this.z = z; } public float getX() { return x; } public float getY() { return y; } public float getZ() { return z; } }