@gorpacrate/core-graphics
Version:
A core library for creating shape-based graphic editors
103 lines • 2.54 kB
JavaScript
;
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