polygon-tools
Version:
99 lines (91 loc) • 1.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.cross = cross;
exports.length = length;
exports.dot = dot;
exports.normalize = normalize;
exports.add = add;
exports.subtract = subtract;
/**
* @module vec
*/
/**
* Cross product
*
* @param {Array} a First vector
* @param {Array} b Second vector
*
* @return {Array}
*/
function cross(a, b) {
a = a.length === 2 ? [a[0], a[1], 0] : a;
b = b.length === 2 ? [b[0], b[1], 0] : b;
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
}
/**
* Length of vector
*
* @param {Array} v Vector
*
* @return {Number}
*/
function length(v) {
return Math.sqrt(v.slice(0, 3).reduce(function (p, w, i) {
return p + w * w;
}, 0));
}
/**
* Dot product
*
* @param {Array} a Vector
* @param {Array} b Vector
*
* @return {Number}
*/
function dot(a, b) {
return a.reduce(function (p, v, i) {
return p + v * b[i];
}, 0);
}
/**
* Normalize a vector
*
* @param {Array} v Vector
*
* @return {Array}
*/
function normalize(v) {
var len = length(v);
return v.slice(0, 3).map(function (i) {
return i / len;
});
}
/**
* Add
*
* @param {Array} a First vector
* @param {Array} b Second vector
*
* @return {Array}
*/
function add(a, b) {
return a.slice(0, 3).map(function (v, i) {
return v + b[i];
});
}
/**
* Subtract
*
* @param {Array} a First vector
* @param {Array} b Second vector
*
* @return {Array}
*/
function subtract(a, b) {
return a.slice(0, 3).map(function (v, i) {
return v - b[i];
});
}
var sub = exports.sub = subtract;