diff options
Diffstat (limited to 'packages/math/utils.ts')
| -rw-r--r-- | packages/math/utils.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/packages/math/utils.ts b/packages/math/utils.ts new file mode 100644 index 0000000..8807c27 --- /dev/null +++ b/packages/math/utils.ts @@ -0,0 +1,33 @@ +export const PRECISION = 10e-5; + +export const clamp = (value: number, min: number, max: number) => { + return Math.min(Math.max(value, min), max); +}; + +export const round = ( + value: number, + precision: number, + func: "round" | "floor" | "ceil" = "round", +) => { + const multiplier = Math.pow(10, precision); + + return Math[func]((value + Number.EPSILON) * multiplier) / multiplier; +}; + +export const roundToStep = ( + value: number, + step: number, + func: "round" | "floor" | "ceil" = "round", +): number => { + const factor = 1 / step; + return Math[func](value * factor) / factor; +}; + +export const average = (a: number, b: number) => (a + b) / 2; + +export const isFiniteNumber = (value: any): value is number => { + return typeof value === "number" && Number.isFinite(value); +}; + +export const isCloseTo = (a: number, b: number, precision = PRECISION) => + Math.abs(a - b) < precision; |
