home *** CD-ROM | disk | FTP | other *** search
Java Source | 1997-02-05 | 2.0 KB | 69 lines |
- // Class for handling 3-dimensional vectors
-
- // Written by Bernie Roehl, November 1996
-
- package utility;
-
- import java.util.*;
-
- public class Vec3 {
- protected float x, y, z;
-
- public float getX() { return x; }
- public float getY() { return y; }
- public float getZ() { return z; }
-
- public Vec3() { x = y = z = 0; }
-
- public Vec3(float xv, float yv, float zv) { x = xv; y = yv; z = zv; }
-
- public Vec3(Float xv, Float yv, Float zv) {
- this(xv.floatValue(), yv.floatValue(), zv.floatValue());
- }
-
- public Vec3(Vec3 value) { x = value.x; y = value.y; z = value.z; }
-
- public Vec3(StringTokenizer s) {
- x = new Float(s.nextToken()).floatValue();
- y = new Float(s.nextToken()).floatValue();
- z = new Float(s.nextToken()).floatValue();
- }
-
- public String toString() { return x + " " + y + " " + z; }
-
- public float dot(Vec3 v) { return (float) (x * v.x + y * v.y + z * v.z); }
-
- public float mag() { return (float) Math.sqrt(x * x + y * y + z * z); }
-
- public Vec3 normalize() {
- float m = mag();
- return new Vec3(x /= m, y /= m, z /= m);
- }
-
- public Vec3 add(Vec3 v) { return new Vec3(x + v.x, y + v.y, z + v.z); }
-
- public Vec3 sub(Vec3 v) { return new Vec3(x - v.x, y - v.y, z - v.z); }
-
- public Vec3 scale(float s) { return new Vec3(x * s, y * s, z * s); }
-
- public Vec3 cross(Vec3 v) {
- Vec3 result = new Vec3();
- result.x = z * v.y - y * v.z;
- result.y = x * v.z - z * v.x;
- result.z = y * v.x - x * v.y;
- return result;
- }
-
- public float angle(Vec3 v) {
- float mag_product = mag() * v.mag();
- if (mag_product == 0.0f)
- return 0.0f;
- float cos_theta = dot(v) / mag_product;
- if (cos_theta <= -1.0)
- return (float) Math.PI;
- if (cos_theta >= 1.0)
- return 0.0f;
- return (float) Math.acos(cos_theta);
- }
- }
-