// 3D Engine // // Vector with components (x, y, z, w). // // Author Matthew Caryl // Created 4.5.97 // // Although under copywrite to the author (Matthew Caryl) this code can be copied and modified for non-commercial // purposes as long as any derivatives contain this condition. package ADT; import java.lang.Math; public class Vector { // // Public interface // public float x, y, z, w; public Vector(float X, float Y, float Z) { set(X, Y, Z); } public Vector() { set(0f, 0f, 0f); } public Vector(Vector v) { set(v); } public void set(float X, float Y, float Z) { x = X; y = Y; z = Z; w = 1f; } public void set(Vector v) { x = v.x; y = v.y; z = v.z; w = v.w; } public void normalise() { float m = (float) Math.sqrt(x * x + y * y + z * z); if (m != 0f) { x /= m; y /= m; z /= m; w = 1f; } } /* public void renormalise() { if (w != 0f) { x /= w; y /= w; z /= w; w = 1f; } else set(0f, 0f, 0f); } */ public void renormalise() { if (w > 0f) { x /= w; y /= w; z /= w; w = 1f; } else if (w < 0f) { x /= -w; y /= -w; z /= -w; w = 1f; } else set(0f, 0f, 0f); } public void subtract(Vector v) { x -= v.x; y -= v.y; z -= v.z; w -= v.w; } public float dot(Vector v) { return x * v.x + y * v.y + z * v.z; } public void cross(Vector v) { float old_x = x; float old_y = y; float old_z = z; float old_w = w; x = old_y * v.z - old_z * v.y; y = -old_x * v.z + old_z * v.x; z = old_x * v.y - old_y * v.x; } }