UNPKG

@gorpacrate/core-graphics

Version:

A core library for creating shape-based graphic editors

103 lines 2.54 kB
"use strict"; exports.__esModule = true; var EPS = 1e-20; function interpolateLinear(payload, x) { var a = payload.a, b = payload.b, c = payload.c, d = payload.d; if (approxEqual(b, a)) { return (c + d / 2); } // a ~= b leads to an undefined result var relative = (x - a) / (b - a); return relative * (d - c) + c; } exports.interpolateLinear = interpolateLinear; function approxEqual(a, b) { return (Math.abs(b - a) < EPS); } exports.approxEqual = approxEqual; function sign(x) { if (x < 0) { return -1; } if (x > 0) { return 1; } return 0; } exports.sign = sign; function modulus(val, base) { return ((val % base) + base) % base; } exports.modulus = modulus; function padNumAbs(params) { var x = params.x, _a = params.minAbs, minAbs = _a === void 0 ? 0 : _a, _b = params.maxAbs, maxAbs = _b === void 0 ? +Infinity : _b; if (x === 0) { return minAbs; } var abs = Math.abs(x); var sgn = sign(x); if ((abs < maxAbs) && (abs > minAbs)) { return x; } if (abs >= maxAbs) { return (maxAbs * sgn); } return (minAbs * sgn); } exports.padNumAbs = padNumAbs; function dist(a, b) { var dx = Math.abs(a.x - b.x); var dy = Math.abs(a.y - b.y); return Math.sqrt(dx * dx + dy * dy); } exports.dist = dist; function lenV(v) { return dist(v, { x: 0, y: 0 }); } exports.lenV = lenV; function normalizeV(v) { var len = lenV(v); if (len < EPS) { return v; } return { x: v.x / len, y: v.y / len }; } exports.normalizeV = normalizeV; function manhattanNormalizeV(v) { var x = v.x, y = v.y; var distX = Math.abs(x); var distY = Math.abs(y); if (distX + distY < EPS) { return v; } if (distX > distY) { return { x: x / distX, y: y / distX }; } else { return { x: x / distY, y: y / distY }; } } exports.manhattanNormalizeV = manhattanNormalizeV; function getClosestPoint(points, to) { if (points.length === 0) { return to; } if (points.length === 1) { return points[0]; } var minPoint = points.reduce(function (res, curr) { var currDist = dist(curr, to); return (currDist < res.minDist) ? { minDist: currDist, minPoint: curr } : res; }, { minDist: +Infinity, minPoint: points[0] }).minPoint; return minPoint; } exports.getClosestPoint = getClosestPoint; //# sourceMappingURL=math.js.map