export default class Vector3 {

	x = 0;
	y = 0;
	z = 0;

	constructor( x = 0, y = 0, z = 0 ) {

		this.x = x;
		this.y = y;
		this.z = z;

	}

	static subtract( a, b ) {

		return new Vector3( a.x - b.x, a.y - b.y, a.z - b.z );

	}


	length() {

		return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );

	}

	static cross( a, b ) {

		return new Vector3(

			a.y * b.z - a.z * b.y,
			a.z * b.x - a.x * b.z,
			a.x * b.y - a.y * b.x
		);

	}

	static dot( a, b ) {

		return a.x * b.x + a.y * b.y + a.z * b.z;

	}

	static normalize( v ) {

		const length = Math.sqrt( v.x * v.x + v.y * v.y + v.z * v.z );

		if ( length > 0.00001 ) {
			
			return new Vector3( v.x / length, v.y / length, v.z / length );

		} else {

			return new Vector3( 0, 0, 0 );

		}

	}
}
