GwieF.com : Project : Classes : Vector3D
logo

Vector3D.java


package com.gwief.jTrace;

/*
    Vector3D.java by Damian Newport
    Stores a 3D vector and has implements behavioral methods for 3D vectors
*/

public class Vector3D{
    public double x,y,z;
    
    public Vector3D(){
        x = 0;
        y = 0;
        z = 0;
    }
    public Vector3D(double a, double b, double c){
        x = a;
        y = b;
        z = c;
    }
    
    public Vector3D(Vector3D a){
        x = a.x;
        y = a.y;
        z = a.z;
    }
    
    public final double getx(){return x;}
    public final double gety(){return y;}
    public final double getz(){return z;}
    
    public final void setx(double a){x = a;}
    public final void sety(double a){y = a;}
    public final void setz(double a){z = a;}
    
    public final void add(Vector3D a){
        x += a.x;
        y += a.y;
        z += a.z;
    }
    
    public final void minus(Vector3D a){
        x -= a.x;
        y -= a.y;
        z -= a.z;
    }
    public final void minus(double a){
        x -= a;
        y -= a;
        z -= a;
    }
    
    public final double dot(Vector3D a){
        return ((x*a.x) + (y*a.y) + (z*a.z));
    }

    public final void cross(Vector3D a){
       Vector3D temp = new Vector3D();
    
        temp.x =(y*a.z)-(z*a.y);
        temp.y =(z*a.x)-(x*a.z);
        temp.z =(x*a.y)-(y*a.x);

        x = temp.x;
        y = temp.y;
        z = temp.z;
    }

    public final double modulus(){
        return Math.sqrt((x*x)+(y*y)+(z*z));
    }
    
    public final void unit(){
        double temp = this.modulus();
        
        x /= temp;
        y /= temp;
        z /= temp;
    }
    
    public final void multiply(double a){
        x *= a;
        y *= a;
        z *= a;
    }
    
    public final void divide(double a){
        x /= a;
        y /= a;
        z /= a;
    }
    
    public final void negate(){
        x = -x;
        y = -y;
        z = -z;
    }
    
    public final void scale(Vector3D a){
        x *= a.x;
        y *= a.y;
        z *= a.z;
    }
    
    public final void translate(Vector3D a){
        x += a.x;
        y += a.y;
        z += a.z;
    }
    
    public final void rotateX(double a){
        a = Math.toDegrees(a);
        y = (y * Math.cos(a)) - (z * Math.sin(a));
        z = (y * Math.sin(a)) + (z * Math.cos(a));
    }
    
    public final void rotateY(double a){
        a = Math.toDegrees(a);
        x = (x * Math.cos(a)) - (z * Math.sin(a));
        z = (x * Math.sin(a)) + (z * Math.cos(a));
    }
    
    public final void rotateZ(double a){
        a = Math.toDegrees(a);
        x = (x * Math.cos(a)) - (y * Math.sin(a));
        y = (x * Math.sin(a)) + (y * Math.cos(a));
    }
    
    public final String out(){
        String a = "";
        a += "x=" + x + ", ";
        a += "y=" + y + ", ";
        a += "z=" + z;
        return a;
    }
}