package framework.physics;
import javax.vecmath.AxisAngle4d;
import javax.vecmath.Vector3d;

import framework.model3D.Object3D;
import framework.model3D.Property3D;


public class AngularVelocity3D extends Property3D{
	private double x;
	private double y;
	private double z;

	public AngularVelocity3D(AngularVelocity3D w) {
		x = w.x;
		y = w.y;
		z = w.z;
	}
			
	public AngularVelocity3D(double x,double y,double z){
		this.x = x;
		this.y = y;
		this.z = z;
	}
	
	public AngularVelocity3D(){
		x = 0.0;
		y = 0.0;
		z = 0.0;	
	}
	
	public void applyTo(Object3D o){
		((Solid3D)o).setAngularVelocity(this);
	}
	
	public double getX() {
		// TODO Auto-generated method stub
		return this.x;
	}
	
	public double getY() {
		// TODO Auto-generated method stub
		return this.y;
	}
	
	public double getZ() {
		// TODO Auto-generated method stub
		return this.z;
	}
	
	public AngularVelocity3D add(double x, double y, double z){
		this.x += x; 
		this.y += y;
		this.z += z;
		return this;
	}

	public AngularVelocity3D add(Vector3d v) {
		// TODO Auto-generated method stub
		this.x += v.x;
		this.y += v.y;
		this.z += v.z;
		return this;
	}
	
	public Vector3d getVector3d(){
		return new Vector3d(x,y,z);
	}
	
	public AxisAngle4d getAxisAngle4d() {
		double l = getVector3d().length();
		if (l <= 0.00001) {
			return new AxisAngle4d(0, 0, 1.0, 0.0);			
		}
		return new AxisAngle4d(x / l, y / l, z / l, l);
	}

	@Override
	public Property3D clone() {
		// TODO Auto-generated method stub
		return new AngularVelocity3D(this);
	}	
}


