@pawells/math-extended 1.0.5 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +5 -5
  2. package/build/angles.d.ts +33 -3
  3. package/build/angles.d.ts.map +1 -1
  4. package/build/angles.js +51 -34
  5. package/build/angles.js.map +1 -1
  6. package/build/interpolation.d.ts +378 -63
  7. package/build/interpolation.d.ts.map +1 -1
  8. package/build/interpolation.js +378 -63
  9. package/build/interpolation.js.map +1 -1
  10. package/build/matrices/asserts.d.ts +12 -15
  11. package/build/matrices/asserts.d.ts.map +1 -1
  12. package/build/matrices/asserts.js +12 -15
  13. package/build/matrices/asserts.js.map +1 -1
  14. package/build/matrices/core.d.ts +11 -12
  15. package/build/matrices/core.d.ts.map +1 -1
  16. package/build/matrices/core.js +11 -12
  17. package/build/matrices/core.js.map +1 -1
  18. package/build/matrices/decompositions.d.ts +23 -24
  19. package/build/matrices/decompositions.d.ts.map +1 -1
  20. package/build/matrices/decompositions.js +85 -141
  21. package/build/matrices/decompositions.js.map +1 -1
  22. package/build/matrices/linear-algebra.d.ts +6 -1
  23. package/build/matrices/linear-algebra.d.ts.map +1 -1
  24. package/build/matrices/linear-algebra.js +54 -19
  25. package/build/matrices/linear-algebra.js.map +1 -1
  26. package/build/matrices/transformations.d.ts +9 -12
  27. package/build/matrices/transformations.d.ts.map +1 -1
  28. package/build/matrices/transformations.js +9 -12
  29. package/build/matrices/transformations.js.map +1 -1
  30. package/build/quaternions/core.d.ts +6 -2
  31. package/build/quaternions/core.d.ts.map +1 -1
  32. package/build/quaternions/core.js +17 -10
  33. package/build/quaternions/core.js.map +1 -1
  34. package/build/random.d.ts +5 -2
  35. package/build/random.d.ts.map +1 -1
  36. package/build/random.js +20 -17
  37. package/build/random.js.map +1 -1
  38. package/build/vectors/core.d.ts.map +1 -1
  39. package/build/vectors/core.js +5 -9
  40. package/build/vectors/core.js.map +1 -1
  41. package/package.json +11 -14
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm](https://img.shields.io/npm/v/@pawells/math-extended)](https://www.npmjs.com/package/@pawells/math-extended)
4
4
  [![GitHub Release](https://img.shields.io/github/v/release/PhillipAWells/math-extended)](https://github.com/PhillipAWells/math-extended/releases)
5
5
  [![CI](https://github.com/PhillipAWells/math-extended/actions/workflows/ci.yml/badge.svg)](https://github.com/PhillipAWells/math-extended/actions/workflows/ci.yml)
6
- [![Node](https://img.shields.io/badge/node-%3E%3D24-brightgreen)](https://nodejs.org)
6
+ [![Node](https://img.shields.io/badge/node-%3E%3D22-brightgreen)](https://nodejs.org)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
8
8
  [![GitHub Sponsors](https://img.shields.io/github/sponsors/PhillipAWells?style=social)](https://github.com/sponsors/PhillipAWells)
9
9
 
@@ -88,7 +88,7 @@ QuaternionUtils.QuaternionSLERP(q1, q2, 0.5);
88
88
  |--------|-------------|
89
89
  | `RandomInt(min, max)` | Random integer in `[min, max]` |
90
90
  | `RandomFloat(min, max)` | Random float in `[min, max)` |
91
- | `RandomBool(probability?)` | Random boolean with optional probability |
91
+ | `RandomBool(probability?)` | Random boolean with optional probability; throws `RangeError` if probability is outside `[0, 1]` |
92
92
  | `RandomNormal(mean?, stdDev?)` | Normal-distributed random number |
93
93
  | `RandomChoice(array)` | Random element from an array |
94
94
  | `RandomSample(array, count)` | `count` unique random elements |
@@ -226,7 +226,7 @@ Matrices are `number[][]` arrays (`IMatrix`, `IMatrix1`–`IMatrix4`). All opera
226
226
 
227
227
  | Export | Description |
228
228
  |--------|-------------|
229
- | `MatrixLU(m)` | LU decomposition `{ L, U }` |
229
+ | `MatrixLU(m)` | LU decomposition with partial pivoting `{ L, U, P }` |
230
230
  | `MatrixQR(m)` | QR decomposition `{ Q, R }` |
231
231
  | `MatrixCholesky(m)` | Cholesky decomposition `L` |
232
232
  | `MatrixEigen(m)` | Eigenvalue decomposition `{ eigenvalues, eigenvectors }` |
@@ -328,14 +328,14 @@ yarn watch # Watch mode
328
328
  yarn typecheck # Type check without building
329
329
  yarn lint # ESLint
330
330
  yarn lint:fix # ESLint with auto-fix
331
- yarn test # Run tests (1077 tests)
331
+ yarn test # Run tests (1080 tests)
332
332
  yarn test:ui # Interactive Vitest UI
333
333
  yarn test:coverage # Tests with coverage report
334
334
  ```
335
335
 
336
336
  ## Requirements
337
337
 
338
- - Node.js >= 24.0.0
338
+ - Node.js >= 22.0.0
339
339
 
340
340
  ## License
341
341
 
package/build/angles.d.ts CHANGED
@@ -2,30 +2,60 @@
2
2
  * Converts degrees to radians
3
3
  * @param degrees - Angle in degrees
4
4
  * @returns Angle in radians
5
+ *
6
+ * @example
7
+ * DegreesToRadians(180) // Math.PI
8
+ * DegreesToRadians(90) // Math.PI / 2
9
+ * DegreesToRadians(0) // 0
5
10
  */
6
11
  export declare function DegreesToRadians(degrees: number): number;
7
12
  /**
8
13
  * Converts radians to degrees
9
14
  * @param radians - Angle in radians
10
15
  * @returns Angle in degrees
16
+ *
17
+ * @example
18
+ * RadiansToDegrees(Math.PI) // 180
19
+ * RadiansToDegrees(Math.PI / 2) // 90
20
+ * RadiansToDegrees(0) // 0
11
21
  */
12
22
  export declare function RadiansToDegrees(radians: number): number;
13
23
  /**
14
24
  * Formats an angle in radians to a string representation in terms of π
15
25
  * @param radians - Angle in radians
16
26
  * @returns String representation of the angle
27
+ *
28
+ * @example
29
+ * FormatRadians(0) // '0'
30
+ * FormatRadians(Math.PI) // 'π'
31
+ * FormatRadians(Math.PI / 2) // 'π/2'
32
+ * FormatRadians(Math.PI / 4) // 'π/4'
33
+ * FormatRadians(-Math.PI) // '-π'
17
34
  */
18
35
  export declare function FormatRadians(radians: number): string;
19
36
  /**
20
37
  * Normalizes an angle in radians to be between 0 and 2π
21
38
  * @param radians - Angle in radians
22
- * @returns Normalized angle in radians (0 to 2π)
39
+ * @returns Normalized angle in radians in the range [0, 2π)
40
+ *
41
+ * @example
42
+ * NormalizeRadians(3 * Math.PI) // Math.PI (wraps around)
43
+ * NormalizeRadians(-Math.PI) // Math.PI (negative angles normalized)
44
+ * NormalizeRadians(0) // 0
23
45
  */
24
46
  export declare function NormalizeRadians(radians: number): number;
25
47
  /**
26
- * Normalizes an angle in degrees to be between 0 and 360
48
+ * Normalizes an angle in degrees to be between 0 and 360.
49
+ * Applies a floating-point epsilon cleanup so values within `1e-10` of 0 or 360
50
+ * are snapped to exactly 0, matching the behaviour of `NormalizeRadians`.
27
51
  * @param degrees - Angle in degrees
28
- * @returns Normalized angle in degrees (0 to 360)
52
+ * @returns Normalized angle in degrees in the range [0°, 360°)
53
+ *
54
+ * @example
55
+ * NormalizeDegrees(450) // 90 (wraps around 360°)
56
+ * NormalizeDegrees(-90) // 270 (negative angles normalized)
57
+ * NormalizeDegrees(0) // 0
58
+ * NormalizeDegrees(360 - 1e-11) // 0 (boundary epsilon snap)
29
59
  */
30
60
  export declare function NormalizeDegrees(degrees: number): number;
31
61
  //# sourceMappingURL=angles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"angles.d.ts","sourceRoot":"","sources":["../src/angles.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsCrD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD"}
1
+ {"version":3,"file":"angles.d.ts","sourceRoot":"","sources":["../src/angles.ts"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAuBrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKxD"}
package/build/angles.js CHANGED
@@ -1,9 +1,5 @@
1
1
  const DEGREES_PER_HALF_REVOLUTION = 180;
2
2
  const DEGREES_PER_FULL_REVOLUTION = 360;
3
- const ANGLE_FRACTION_DENOMINATOR_3 = 3;
4
- const ANGLE_FRACTION_DENOMINATOR_6 = 6;
5
- const ANGLE_FRACTION_QUARTER = 0.25;
6
- const ANGLE_FRACTION_THREE_QUARTERS = 0.75;
7
3
  const ANGLE_FRACTION_TOLERANCE = 0.0001;
8
4
  const ANGLE_MAX_DENOMINATOR = 12;
9
5
  const NORMALIZE_EPSILON = 1e-10; // Epsilon for floating-point boundary cleanup
@@ -11,6 +7,11 @@ const NORMALIZE_EPSILON = 1e-10; // Epsilon for floating-point boundary cleanup
11
7
  * Converts degrees to radians
12
8
  * @param degrees - Angle in degrees
13
9
  * @returns Angle in radians
10
+ *
11
+ * @example
12
+ * DegreesToRadians(180) // Math.PI
13
+ * DegreesToRadians(90) // Math.PI / 2
14
+ * DegreesToRadians(0) // 0
14
15
  */
15
16
  export function DegreesToRadians(degrees) {
16
17
  return (degrees * Math.PI) / DEGREES_PER_HALF_REVOLUTION;
@@ -19,6 +20,11 @@ export function DegreesToRadians(degrees) {
19
20
  * Converts radians to degrees
20
21
  * @param radians - Angle in radians
21
22
  * @returns Angle in degrees
23
+ *
24
+ * @example
25
+ * RadiansToDegrees(Math.PI) // 180
26
+ * RadiansToDegrees(Math.PI / 2) // 90
27
+ * RadiansToDegrees(0) // 0
22
28
  */
23
29
  export function RadiansToDegrees(radians) {
24
30
  return (radians * DEGREES_PER_HALF_REVOLUTION) / Math.PI;
@@ -27,6 +33,13 @@ export function RadiansToDegrees(radians) {
27
33
  * Formats an angle in radians to a string representation in terms of π
28
34
  * @param radians - Angle in radians
29
35
  * @returns String representation of the angle
36
+ *
37
+ * @example
38
+ * FormatRadians(0) // '0'
39
+ * FormatRadians(Math.PI) // 'π'
40
+ * FormatRadians(Math.PI / 2) // 'π/2'
41
+ * FormatRadians(Math.PI / 4) // 'π/4'
42
+ * FormatRadians(-Math.PI) // '-π'
30
43
  */
31
44
  export function FormatRadians(radians) {
32
45
  const r = radians / Math.PI;
@@ -36,32 +49,19 @@ export function FormatRadians(radians) {
36
49
  return 'π';
37
50
  if (r === -1)
38
51
  return '-π';
39
- // Handle common fractions of π
40
- const fractions = [
41
- { value: 1 / 2, str: 'π/2' },
42
- { value: ANGLE_FRACTION_QUARTER, str: 'π/4' },
43
- { value: ANGLE_FRACTION_THREE_QUARTERS, str: '3π/4' },
44
- { value: 1 / ANGLE_FRACTION_DENOMINATOR_6, str: 'π/6' },
45
- { value: 1 / ANGLE_FRACTION_DENOMINATOR_3, str: 'π/3' },
46
- { value: 2 / ANGLE_FRACTION_DENOMINATOR_3, str: '2π/3' },
47
- ];
48
- for (const fraction of fractions) {
49
- if (Math.abs(r - fraction.value) < ANGLE_FRACTION_TOLERANCE)
50
- return fraction.str;
51
- if (Math.abs(r + fraction.value) < ANGLE_FRACTION_TOLERANCE)
52
- return '-' + fraction.str;
53
- }
54
- // Try to find a simple fraction representation
55
- const tolerance = ANGLE_FRACTION_TOLERANCE;
56
- for (let denominator = 2; denominator <= ANGLE_MAX_DENOMINATOR; denominator++) {
57
- for (let numerator = 1; numerator < denominator; numerator++) {
58
- const frac = numerator / denominator;
59
- if (Math.abs(r - frac) < tolerance) {
60
- return `${numerator === 1 ? '' : numerator}π/${denominator}`;
61
- }
62
- if (Math.abs(r + frac) < tolerance) {
63
- return `-${numerator === 1 ? '' : numerator}π/${denominator}`;
64
- }
52
+ const absR = Math.abs(r);
53
+ const sign = r < 0 ? '-' : '';
54
+ // Try to express |r| as n/d for d in [2, ANGLE_MAX_DENOMINATOR].
55
+ // Iterating from the smallest denominator first ensures reduced fractions
56
+ // are returned (e.g., π/2 is found at d=2 before 2π/4 would be at d=4).
57
+ for (let d = 2; d <= ANGLE_MAX_DENOMINATOR; d++) {
58
+ const n = Math.round(absR * d);
59
+ if (n === 0)
60
+ continue; // zero already handled
61
+ if (n % d === 0)
62
+ continue; // integer multiple of π — fall through to fallback
63
+ if (Math.abs(absR - n / d) < ANGLE_FRACTION_TOLERANCE) {
64
+ return n === 1 ? `${sign}π/${d}` : `${sign}${n}π/${d}`;
65
65
  }
66
66
  }
67
67
  return `${r}π`;
@@ -69,7 +69,12 @@ export function FormatRadians(radians) {
69
69
  /**
70
70
  * Normalizes an angle in radians to be between 0 and 2π
71
71
  * @param radians - Angle in radians
72
- * @returns Normalized angle in radians (0 to 2π)
72
+ * @returns Normalized angle in radians in the range [0, 2π)
73
+ *
74
+ * @example
75
+ * NormalizeRadians(3 * Math.PI) // Math.PI (wraps around)
76
+ * NormalizeRadians(-Math.PI) // Math.PI (negative angles normalized)
77
+ * NormalizeRadians(0) // 0
73
78
  */
74
79
  export function NormalizeRadians(radians) {
75
80
  const twoPi = 2 * Math.PI;
@@ -80,11 +85,23 @@ export function NormalizeRadians(radians) {
80
85
  return result;
81
86
  }
82
87
  /**
83
- * Normalizes an angle in degrees to be between 0 and 360
88
+ * Normalizes an angle in degrees to be between 0 and 360.
89
+ * Applies a floating-point epsilon cleanup so values within `1e-10` of 0 or 360
90
+ * are snapped to exactly 0, matching the behaviour of `NormalizeRadians`.
84
91
  * @param degrees - Angle in degrees
85
- * @returns Normalized angle in degrees (0 to 360)
92
+ * @returns Normalized angle in degrees in the range [0°, 360°)
93
+ *
94
+ * @example
95
+ * NormalizeDegrees(450) // 90 (wraps around 360°)
96
+ * NormalizeDegrees(-90) // 270 (negative angles normalized)
97
+ * NormalizeDegrees(0) // 0
98
+ * NormalizeDegrees(360 - 1e-11) // 0 (boundary epsilon snap)
86
99
  */
87
100
  export function NormalizeDegrees(degrees) {
88
- return ((degrees % DEGREES_PER_FULL_REVOLUTION) + DEGREES_PER_FULL_REVOLUTION) % DEGREES_PER_FULL_REVOLUTION;
101
+ const result = ((degrees % DEGREES_PER_FULL_REVOLUTION) + DEGREES_PER_FULL_REVOLUTION) % DEGREES_PER_FULL_REVOLUTION;
102
+ // Epsilon cleanup for floating-point precision at boundaries (mirrors NormalizeRadians)
103
+ if (result < NORMALIZE_EPSILON || result > DEGREES_PER_FULL_REVOLUTION - NORMALIZE_EPSILON)
104
+ return 0;
105
+ return result;
89
106
  }
90
107
  //# sourceMappingURL=angles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"angles.js","sourceRoot":"","sources":["../src/angles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angles.js","sourceRoot":"","sources":["../src/angles.ts"],"names":[],"mappings":"AAAA,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,8CAA8C;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC/C,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,2BAA2B,CAAC;AAC1D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC/C,OAAO,CAAC,OAAO,GAAG,2BAA2B,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC5C,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IAE5B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9B,iEAAiE;IACjE,0EAA0E;IAC1E,wEAAwE;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,qBAAqB,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS,CAAQ,uBAAuB;QACrD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS,CAAI,mDAAmD;QACjF,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,wBAAwB,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,CAAC;IACF,CAAC;IAED,OAAO,GAAG,CAAC,GAAG,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;IACnD,6DAA6D;IAC7D,IAAI,MAAM,GAAG,iBAAiB,IAAI,MAAM,GAAG,KAAK,GAAG,iBAAiB;QAAE,OAAO,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,2BAA2B,CAAC,GAAG,2BAA2B,CAAC,GAAG,2BAA2B,CAAC;IACrH,wFAAwF;IACxF,IAAI,MAAM,GAAG,iBAAiB,IAAI,MAAM,GAAG,2BAA2B,GAAG,iBAAiB;QAAE,OAAO,CAAC,CAAC;IACrG,OAAO,MAAM,CAAC;AACf,CAAC"}