UNPKG

xtorcga

Version:

Xtor Compute Geometry Algorithm Libary 计算几何算法库

142 lines (141 loc) 4.68 kB
"use strict"; /** * 当向量以数组的方式出现,一个计算单元库 * @Description : 向量数组 * @Author : 赵耀圣 * @QQ : 549184003 * @Date : 2021-08-02 15:09:33 * @LastEditTime : 2021-08-02 15:50:16 * @FilePath : \cga.js\src\math\VecArray.ts */ Object.defineProperty(exports, "__esModule", { value: true }); exports.VecArray = void 0; var VecArray = /** @class */ (function () { function VecArray() { } /** * 检测相邻没有重复点 */ VecArray.uniqueNeighbor = function (vs, component) { if (component === void 0) { component = 3; } for (var i = 0; i < vs.length; i += component) { for (var j = i + 3; j < vs.length;) { var lensq = 0; for (var c = 0; c < component; c++) { lensq += (vs[i + c] - vs[j + c]) * (vs[i + c] - vs[j + c]); } if (Math.sqrt(lensq) < 1e-5) vs.splice(j, component); else break; } } return vs; }; /** * 去除任意重复点 * */ VecArray.unique = function (vs, component) { if (component === void 0) { component = 3; } for (var i = 0; i < vs.length; i += component) { for (var j = i + 3; j < vs.length;) { var lensq = 0; for (var c = 0; c < component; c++) { lensq += (vs[i + c] - vs[j + c]) * (vs[i + c] - vs[j + c]); } if (Math.sqrt(lensq) < 1e-5) vs.splice(j, component); else j += component; } } return vs; }; VecArray.distanceSq = function () { var vecs = []; for (var _i = 0; _i < arguments.length; _i++) { vecs[_i] = arguments[_i]; } if (vecs.length % 2 !== 0) console.error("VecArray:distanceSq 向量错误!!!"); var len = vecs.length / 2; var lenSq = 0; for (var i = 0; i < len; i++) { var d = (vecs[i] - vecs[len + i]); lenSq += d * d; } return lenSq; }; VecArray.distance = function () { var vecs = []; for (var _i = 0; _i < arguments.length; _i++) { vecs[_i] = arguments[_i]; } return Math.sqrt(this.distanceSq.apply(this, vecs)); }; VecArray.reverse = function (vs, component) { if (component === void 0) { component = 3; } var length = vs.length; for (var i = 0; i < length; i += component) { vs.unshift.apply(vs, vs.splice(i, component)); } return vs; }; VecArray.dot = function () { var vecs = []; for (var _i = 0; _i < arguments.length; _i++) { vecs[_i] = arguments[_i]; } if (vecs.length % 2 !== 0) console.error("VecArray:distanceSq 向量错误!!!"); var len = vecs.length / 2; var dot = 0; for (var i = 0; i < len; i++) { dot += vecs[i] * vecs[len + i]; } return dot; }; VecArray.add = function () { var vecs = []; for (var _i = 0; _i < arguments.length; _i++) { vecs[_i] = arguments[_i]; } if (Array.isArray(vecs[0]) && Array.isArray(vecs[1])) { for (var i = 0; i < vecs[0].length; i++) { vecs[0][i] += vecs[1][i]; } return vecs[0]; } if (vecs.length % 2 !== 0) console.error("VecArray:distanceSq 向量错误!!!"); var len = vecs.length / 2; var res = []; for (var i = 0; i < len; i++) { res[i] = res[len + i] + res[i]; } return res; }; VecArray.sub = function () { var vecs = []; for (var _i = 0; _i < arguments.length; _i++) { vecs[_i] = arguments[_i]; } if (Array.isArray(vecs[0]) && Array.isArray(vecs[1])) { for (var i = 0; i < vecs[0].length; i++) { vecs[0][i] -= vecs[1][i]; } return vecs[0]; } if (vecs.length % 2 !== 0) console.error("VecArray:distanceSq 向量错误!!!"); var len = vecs.length / 2; var res = []; for (var i = 0; i < len; i++) { res[i] = res[i] - res[len + i]; } return res; }; return VecArray; }()); exports.VecArray = VecArray;