@mousepox/math
Version:
Math-related objects and utilities
41 lines (40 loc) • 1.47 kB
JavaScript
export var DirectionMask;
(function (DirectionMask) {
DirectionMask[DirectionMask["None"] = 0] = "None";
DirectionMask[DirectionMask["North"] = 1] = "North";
DirectionMask[DirectionMask["East"] = 2] = "East";
DirectionMask[DirectionMask["South"] = 4] = "South";
DirectionMask[DirectionMask["West"] = 8] = "West";
DirectionMask[DirectionMask["NorthEast"] = 16] = "NorthEast";
DirectionMask[DirectionMask["SouthEast"] = 32] = "SouthEast";
DirectionMask[DirectionMask["SouthWest"] = 64] = "SouthWest";
DirectionMask[DirectionMask["NorthWest"] = 128] = "NorthWest";
})(DirectionMask || (DirectionMask = {}));
export const GoldenRatio = (Math.sqrt(5) + 1) / 2;
export const Tau = Math.PI * 2;
export function approximately(a, b, threshold = Number.EPSILON) {
return Math.abs(a - b) < threshold;
}
export function clamp(value, min, max) {
return Math.min(Math.max(value, min), max);
}
export function distance(x1, y1, x2, y2) {
return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
}
export function manhattanDistance(x1, y1, x2, y2) {
return Math.abs(x1 - x2) + Math.abs(y1 - y2);
}
export function lerpAngle(a, b, t) {
const da = (b - a) % Tau;
const n = ((2 * da) % Tau) - da;
return a + n * t;
}
export function sign(n) {
return n > 0 ? 1 : n === 0 ? 0 : -1;
}
export function lerp(a, b, t) {
return a + (b - a) * t;
}
export function wrapRadians(radians) {
return ((radians % Tau) + Tau) % Tau;
}