UNPKG

polygon-tools

Version:
99 lines (91 loc) 1.62 kB
"use strict"; 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;