/**
* @fileoverview
* @author David Gossow - dgossow@willowgarage.com
*/
/**
* A 3D vector.
*
* @constructor
* @param options - object with following keys:
* * x - the x value
* * y - the y value
* * z - the z value
*/
function Vector3(options) {
options = options || {};
this.x = options.x || 0;
this.y = options.y || 0;
this.z = options.z || 0;
}
/**
* Set the values of this vector to the sum of itself and the given vector.
*
* @param v the vector to add with
*/
Vector3.prototype.add = function(v) {
this.x += v.x;
this.y += v.y;
this.z += v.z;
};
/**
* Set the values of this vector to the difference of itself and the given vector.
*
* @param v the vector to subtract with
*/
Vector3.prototype.subtract = function(v) {
this.x -= v.x;
this.y -= v.y;
this.z -= v.z;
};
/**
* Multiply the given Quaternion with this vector.
*
* @param q - the quaternion to multiply with
*/
Vector3.prototype.multiplyQuaternion = function(q) {
var ix = q.w * this.x + q.y * this.z - q.z * this.y;
var iy = q.w * this.y + q.z * this.x - q.x * this.z;
var iz = q.w * this.z + q.x * this.y - q.y * this.x;
var iw = -q.x * this.x - q.y * this.y - q.z * this.z;
this.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;
this.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;
this.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;
};
/**
* Clone a copy of this vector.
*
* @returns the cloned vector
*/
Vector3.prototype.clone = function() {
return new Vector3(this);
};
module.exports = Vector3;