113 lines
2.4 KiB
JavaScript
113 lines
2.4 KiB
JavaScript
// node_modules/ol/math.js
|
|
function clamp(value, min, max) {
|
|
return Math.min(Math.max(value, min), max);
|
|
}
|
|
function squaredSegmentDistance(x, y, x1, y1, x2, y2) {
|
|
const dx = x2 - x1;
|
|
const dy = y2 - y1;
|
|
if (dx !== 0 || dy !== 0) {
|
|
const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);
|
|
if (t > 1) {
|
|
x1 = x2;
|
|
y1 = y2;
|
|
} else if (t > 0) {
|
|
x1 += dx * t;
|
|
y1 += dy * t;
|
|
}
|
|
}
|
|
return squaredDistance(x, y, x1, y1);
|
|
}
|
|
function squaredDistance(x1, y1, x2, y2) {
|
|
const dx = x2 - x1;
|
|
const dy = y2 - y1;
|
|
return dx * dx + dy * dy;
|
|
}
|
|
function solveLinearSystem(mat) {
|
|
const n = mat.length;
|
|
for (let i = 0; i < n; i++) {
|
|
let maxRow = i;
|
|
let maxEl = Math.abs(mat[i][i]);
|
|
for (let r = i + 1; r < n; r++) {
|
|
const absValue = Math.abs(mat[r][i]);
|
|
if (absValue > maxEl) {
|
|
maxEl = absValue;
|
|
maxRow = r;
|
|
}
|
|
}
|
|
if (maxEl === 0) {
|
|
return null;
|
|
}
|
|
const tmp = mat[maxRow];
|
|
mat[maxRow] = mat[i];
|
|
mat[i] = tmp;
|
|
for (let j = i + 1; j < n; j++) {
|
|
const coef = -mat[j][i] / mat[i][i];
|
|
for (let k = i; k < n + 1; k++) {
|
|
if (i == k) {
|
|
mat[j][k] = 0;
|
|
} else {
|
|
mat[j][k] += coef * mat[i][k];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
const x = new Array(n);
|
|
for (let l = n - 1; l >= 0; l--) {
|
|
x[l] = mat[l][n] / mat[l][l];
|
|
for (let m = l - 1; m >= 0; m--) {
|
|
mat[m][n] -= mat[m][l] * x[l];
|
|
}
|
|
}
|
|
return x;
|
|
}
|
|
function toDegrees(angleInRadians) {
|
|
return angleInRadians * 180 / Math.PI;
|
|
}
|
|
function toRadians(angleInDegrees) {
|
|
return angleInDegrees * Math.PI / 180;
|
|
}
|
|
function modulo(a, b) {
|
|
const r = a % b;
|
|
return r * b < 0 ? r + b : r;
|
|
}
|
|
function lerp(a, b, x) {
|
|
return a + x * (b - a);
|
|
}
|
|
function toFixed(n, decimals) {
|
|
const factor = Math.pow(10, decimals);
|
|
return Math.round(n * factor) / factor;
|
|
}
|
|
function round(n, decimals) {
|
|
return Math.round(toFixed(n, decimals));
|
|
}
|
|
function floor(n, decimals) {
|
|
return Math.floor(toFixed(n, decimals));
|
|
}
|
|
function ceil(n, decimals) {
|
|
return Math.ceil(toFixed(n, decimals));
|
|
}
|
|
function wrap(n, min, max) {
|
|
if (n >= min && n < max) {
|
|
return n;
|
|
}
|
|
const range = max - min;
|
|
return ((n - min) % range + range) % range + min;
|
|
}
|
|
|
|
export {
|
|
clamp,
|
|
squaredSegmentDistance,
|
|
squaredDistance,
|
|
solveLinearSystem,
|
|
toDegrees,
|
|
toRadians,
|
|
modulo,
|
|
lerp,
|
|
toFixed,
|
|
round,
|
|
floor,
|
|
ceil,
|
|
wrap
|
|
};
|
|
//# sourceMappingURL=chunk-54BTDBAD.js.map
|