@pawells/math-extended 1.0.1 → 1.0.4

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 (94) hide show
  1. package/README.md +24 -1
  2. package/build/index.d.ts +3 -0
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +5 -0
  5. package/build/index.js.map +1 -1
  6. package/build/quaternions/asserts.d.ts +1 -1
  7. package/build/quaternions/asserts.d.ts.map +1 -1
  8. package/build/quaternions/asserts.js +1 -1
  9. package/build/quaternions/asserts.js.map +1 -1
  10. package/package.json +16 -4
  11. package/build/angles.spec.d.ts +0 -2
  12. package/build/angles.spec.d.ts.map +0 -1
  13. package/build/angles.spec.js +0 -147
  14. package/build/angles.spec.js.map +0 -1
  15. package/build/clamp.spec.d.ts +0 -2
  16. package/build/clamp.spec.d.ts.map +0 -1
  17. package/build/clamp.spec.js +0 -19
  18. package/build/clamp.spec.js.map +0 -1
  19. package/build/documentation-validation.spec.d.ts +0 -11
  20. package/build/documentation-validation.spec.d.ts.map +0 -1
  21. package/build/documentation-validation.spec.js +0 -401
  22. package/build/documentation-validation.spec.js.map +0 -1
  23. package/build/interpolation.spec.d.ts +0 -2
  24. package/build/interpolation.spec.d.ts.map +0 -1
  25. package/build/interpolation.spec.js +0 -480
  26. package/build/interpolation.spec.js.map +0 -1
  27. package/build/matrices/arithmetic.spec.d.ts +0 -2
  28. package/build/matrices/arithmetic.spec.d.ts.map +0 -1
  29. package/build/matrices/arithmetic.spec.js +0 -915
  30. package/build/matrices/arithmetic.spec.js.map +0 -1
  31. package/build/matrices/asserts.spec.d.ts +0 -2
  32. package/build/matrices/asserts.spec.d.ts.map +0 -1
  33. package/build/matrices/asserts.spec.js +0 -565
  34. package/build/matrices/asserts.spec.js.map +0 -1
  35. package/build/matrices/core.spec.d.ts +0 -2
  36. package/build/matrices/core.spec.d.ts.map +0 -1
  37. package/build/matrices/core.spec.js +0 -634
  38. package/build/matrices/core.spec.js.map +0 -1
  39. package/build/matrices/decompositions.spec.d.ts +0 -2
  40. package/build/matrices/decompositions.spec.d.ts.map +0 -1
  41. package/build/matrices/decompositions.spec.js +0 -195
  42. package/build/matrices/decompositions.spec.js.map +0 -1
  43. package/build/matrices/linear-algebra.spec.d.ts +0 -2
  44. package/build/matrices/linear-algebra.spec.d.ts.map +0 -1
  45. package/build/matrices/linear-algebra.spec.js +0 -355
  46. package/build/matrices/linear-algebra.spec.js.map +0 -1
  47. package/build/matrices/normalization.spec.d.ts +0 -2
  48. package/build/matrices/normalization.spec.d.ts.map +0 -1
  49. package/build/matrices/normalization.spec.js +0 -335
  50. package/build/matrices/normalization.spec.js.map +0 -1
  51. package/build/matrices/transformations.spec.d.ts +0 -2
  52. package/build/matrices/transformations.spec.d.ts.map +0 -1
  53. package/build/matrices/transformations.spec.js +0 -755
  54. package/build/matrices/transformations.spec.js.map +0 -1
  55. package/build/quaternions/asserts.spec.d.ts +0 -2
  56. package/build/quaternions/asserts.spec.d.ts.map +0 -1
  57. package/build/quaternions/asserts.spec.js +0 -320
  58. package/build/quaternions/asserts.spec.js.map +0 -1
  59. package/build/quaternions/conversions.spec.d.ts +0 -2
  60. package/build/quaternions/conversions.spec.d.ts.map +0 -1
  61. package/build/quaternions/conversions.spec.js +0 -344
  62. package/build/quaternions/conversions.spec.js.map +0 -1
  63. package/build/quaternions/core.spec.d.ts +0 -2
  64. package/build/quaternions/core.spec.d.ts.map +0 -1
  65. package/build/quaternions/core.spec.js +0 -294
  66. package/build/quaternions/core.spec.js.map +0 -1
  67. package/build/quaternions/interpolation.spec.d.ts +0 -2
  68. package/build/quaternions/interpolation.spec.d.ts.map +0 -1
  69. package/build/quaternions/interpolation.spec.js +0 -64
  70. package/build/quaternions/interpolation.spec.js.map +0 -1
  71. package/build/quaternions/predefined.spec.d.ts +0 -2
  72. package/build/quaternions/predefined.spec.d.ts.map +0 -1
  73. package/build/quaternions/predefined.spec.js +0 -35
  74. package/build/quaternions/predefined.spec.js.map +0 -1
  75. package/build/random.spec.d.ts +0 -2
  76. package/build/random.spec.d.ts.map +0 -1
  77. package/build/random.spec.js +0 -267
  78. package/build/random.spec.js.map +0 -1
  79. package/build/vectors/asserts.spec.d.ts +0 -2
  80. package/build/vectors/asserts.spec.d.ts.map +0 -1
  81. package/build/vectors/asserts.spec.js +0 -260
  82. package/build/vectors/asserts.spec.js.map +0 -1
  83. package/build/vectors/core.spec.d.ts +0 -2
  84. package/build/vectors/core.spec.d.ts.map +0 -1
  85. package/build/vectors/core.spec.js +0 -343
  86. package/build/vectors/core.spec.js.map +0 -1
  87. package/build/vectors/interpolation.spec.d.ts +0 -2
  88. package/build/vectors/interpolation.spec.d.ts.map +0 -1
  89. package/build/vectors/interpolation.spec.js +0 -378
  90. package/build/vectors/interpolation.spec.js.map +0 -1
  91. package/build/vectors/predefined.spec.d.ts +0 -2
  92. package/build/vectors/predefined.spec.d.ts.map +0 -1
  93. package/build/vectors/predefined.spec.js +0 -333
  94. package/build/vectors/predefined.spec.js.map +0 -1
@@ -1,344 +0,0 @@
1
- import { QuaternionIdentity, QuaternionEquals, QuaternionNormalize } from './core.js';
2
- import { QuaternionRotationX, QuaternionRotationY, QuaternionRotationZ } from './predefined.js';
3
- import { QuaternionError } from './asserts.js';
4
- import { DegreesToRadians } from '../angles.ts';
5
- import { IsValidRotationMatrix, QuaternionFromRotationMatrix, QuaternionFromTransformationMatrix, QuaternionToRotationMatrix, QuaternionToTransformationMatrix } from './conversions.js';
6
- import { AssertMatrixRow, AssertMatrixValue } from '../matrices/asserts.ts';
7
- describe('Quaternion Conversions', () => {
8
- const TOLERANCE = 1e-6;
9
- describe('QuaternionToRotationMatrix', () => {
10
- test('should convert identity quaternion to identity matrix', () => {
11
- const quaternion = QuaternionIdentity();
12
- const matrix = QuaternionToRotationMatrix(quaternion);
13
- const expectedMatrix = [
14
- [1, 0, 0],
15
- [0, 1, 0],
16
- [0, 0, 1],
17
- ];
18
- expect(matrix).toEqual(expectedMatrix);
19
- });
20
- test('should convert 90-degree rotation around X-axis', () => {
21
- const quaternion = QuaternionRotationX(DegreesToRadians(90));
22
- const matrix = QuaternionToRotationMatrix(quaternion);
23
- // 90° rotation around X should transform Y to Z and Z to -Y
24
- expect(matrix[0][0]).toBeCloseTo(1, 5);
25
- expect(matrix[0][1]).toBeCloseTo(0, 5);
26
- expect(matrix[0][2]).toBeCloseTo(0, 5);
27
- expect(matrix[1][0]).toBeCloseTo(0, 5);
28
- expect(matrix[1][1]).toBeCloseTo(0, 5);
29
- expect(matrix[1][2]).toBeCloseTo(-1, 5);
30
- expect(matrix[2][0]).toBeCloseTo(0, 5);
31
- expect(matrix[2][1]).toBeCloseTo(1, 5);
32
- expect(matrix[2][2]).toBeCloseTo(0, 5);
33
- });
34
- test('should convert 90-degree rotation around Y-axis', () => {
35
- const quaternion = QuaternionRotationY(DegreesToRadians(90));
36
- const matrix = QuaternionToRotationMatrix(quaternion);
37
- // 90° rotation around Y should transform X to -Z and Z to X
38
- expect(matrix[0][0]).toBeCloseTo(0, 5);
39
- expect(matrix[0][1]).toBeCloseTo(0, 5);
40
- expect(matrix[0][2]).toBeCloseTo(1, 5);
41
- expect(matrix[1][0]).toBeCloseTo(0, 5);
42
- expect(matrix[1][1]).toBeCloseTo(1, 5);
43
- expect(matrix[1][2]).toBeCloseTo(0, 5);
44
- expect(matrix[2][0]).toBeCloseTo(-1, 5);
45
- expect(matrix[2][1]).toBeCloseTo(0, 5);
46
- expect(matrix[2][2]).toBeCloseTo(0, 5);
47
- });
48
- test('should convert 90-degree rotation around Z-axis', () => {
49
- const quaternion = QuaternionRotationZ(DegreesToRadians(90));
50
- const matrix = QuaternionToRotationMatrix(quaternion);
51
- // 90° rotation around Z should transform X to Y and Y to -X
52
- expect(matrix[0][0]).toBeCloseTo(0, 5);
53
- expect(matrix[0][1]).toBeCloseTo(-1, 5);
54
- expect(matrix[0][2]).toBeCloseTo(0, 5);
55
- expect(matrix[1][0]).toBeCloseTo(1, 5);
56
- expect(matrix[1][1]).toBeCloseTo(0, 5);
57
- expect(matrix[1][2]).toBeCloseTo(0, 5);
58
- expect(matrix[2][0]).toBeCloseTo(0, 5);
59
- expect(matrix[2][1]).toBeCloseTo(0, 5);
60
- expect(matrix[2][2]).toBeCloseTo(1, 5);
61
- });
62
- test('should throw for non-normalized quaternion', () => {
63
- const nonNormalized = [1, 1, 1, 1];
64
- expect(() => QuaternionToRotationMatrix(nonNormalized)).toThrow(QuaternionError);
65
- });
66
- });
67
- describe('QuaternionFromRotationMatrix', () => {
68
- test('should convert identity matrix to identity quaternion', () => {
69
- const identityMatrix = [
70
- [1, 0, 0],
71
- [0, 1, 0],
72
- [0, 0, 1],
73
- ];
74
- const quaternion = QuaternionFromRotationMatrix(identityMatrix);
75
- const expected = QuaternionIdentity();
76
- expect(QuaternionEquals(quaternion, expected, TOLERANCE, true)).toBe(true);
77
- });
78
- test('should convert 90-degree X rotation matrix', () => {
79
- const matrix = [
80
- [1, 0, 0],
81
- [0, 0, -1],
82
- [0, 1, 0],
83
- ];
84
- const quaternion = QuaternionFromRotationMatrix(matrix);
85
- const expected = QuaternionRotationX(DegreesToRadians(90));
86
- expect(QuaternionEquals(quaternion, expected, TOLERANCE, true)).toBe(true);
87
- });
88
- test('should convert 90-degree Y rotation matrix', () => {
89
- const matrix = [
90
- [0, 0, 1],
91
- [0, 1, 0],
92
- [-1, 0, 0],
93
- ];
94
- const quaternion = QuaternionFromRotationMatrix(matrix);
95
- const expected = QuaternionRotationY(DegreesToRadians(90));
96
- expect(QuaternionEquals(quaternion, expected, TOLERANCE, true)).toBe(true);
97
- });
98
- test('should convert 90-degree Z rotation matrix', () => {
99
- const matrix = [
100
- [0, -1, 0],
101
- [1, 0, 0],
102
- [0, 0, 1],
103
- ];
104
- const quaternion = QuaternionFromRotationMatrix(matrix);
105
- const expected = QuaternionRotationZ(DegreesToRadians(90));
106
- expect(QuaternionEquals(quaternion, expected, TOLERANCE, true)).toBe(true);
107
- });
108
- test('should handle matrix with largest diagonal element in different positions', () => {
109
- // Test case where m11 is largest
110
- const matrix = [
111
- [0, 0, 1],
112
- [0, 1, 0],
113
- [-1, 0, 0],
114
- ];
115
- const quaternion = QuaternionFromRotationMatrix(matrix);
116
- expect(quaternion).toHaveLength(4);
117
- expect(Math.abs(Math.sqrt((quaternion[0] ** 2) + (quaternion[1] ** 2) + (quaternion[2] ** 2) + (quaternion[3] ** 2)) - 1)).toBeLessThan(TOLERANCE);
118
- });
119
- test('should handle matrix with largest diagonal element m22', () => {
120
- // Test case where m22 is largest
121
- const matrix = [
122
- [0, 1, 0],
123
- [-1, 0, 0],
124
- [0, 0, 1],
125
- ];
126
- const quaternion = QuaternionFromRotationMatrix(matrix);
127
- expect(quaternion).toHaveLength(4);
128
- expect(Math.abs(Math.sqrt((quaternion[0] ** 2) + (quaternion[1] ** 2) + (quaternion[2] ** 2) + (quaternion[3] ** 2)) - 1)).toBeLessThan(TOLERANCE);
129
- });
130
- test('should throw for invalid matrix dimensions', () => {
131
- const invalidMatrix = [[1, 0], [0, 1]];
132
- expect(() => QuaternionFromRotationMatrix(invalidMatrix)).toThrow();
133
- });
134
- });
135
- describe('QuaternionToTransformationMatrix', () => {
136
- test('should convert identity quaternion to 4x4 identity matrix', () => {
137
- const quaternion = QuaternionIdentity();
138
- const matrix4x4 = QuaternionToTransformationMatrix(quaternion);
139
- const expected = [
140
- [1, 0, 0, 0],
141
- [0, 1, 0, 0],
142
- [0, 0, 1, 0],
143
- [0, 0, 0, 1],
144
- ];
145
- expect(matrix4x4).toEqual(expected);
146
- });
147
- test('should convert rotation quaternion to 4x4 transformation matrix', () => {
148
- const quaternion = QuaternionRotationZ(DegreesToRadians(90));
149
- const matrix4x4 = QuaternionToTransformationMatrix(quaternion);
150
- // Should be a 4x4 matrix
151
- expect(matrix4x4).toHaveLength(4);
152
- expect(matrix4x4[0]).toHaveLength(4);
153
- // Last row should be [0, 0, 0, 1]
154
- expect(matrix4x4[3][0]).toBeCloseTo(0, 5);
155
- expect(matrix4x4[3][1]).toBeCloseTo(0, 5);
156
- expect(matrix4x4[3][2]).toBeCloseTo(0, 5);
157
- expect(matrix4x4[3][3]).toBeCloseTo(1, 5);
158
- // Translation elements should be 0
159
- expect(matrix4x4[0][3]).toBeCloseTo(0, 5);
160
- expect(matrix4x4[1][3]).toBeCloseTo(0, 5);
161
- expect(matrix4x4[2][3]).toBeCloseTo(0, 5);
162
- });
163
- test('should maintain rotation properties in 4x4 matrix', () => {
164
- const quaternion = QuaternionRotationX(DegreesToRadians(45));
165
- const matrix4x4 = QuaternionToTransformationMatrix(quaternion);
166
- // Extract 3x3 rotation part
167
- const rotationMatrix = [
168
- [matrix4x4[0][0], matrix4x4[0][1], matrix4x4[0][2]],
169
- [matrix4x4[1][0], matrix4x4[1][1], matrix4x4[1][2]],
170
- [matrix4x4[2][0], matrix4x4[2][1], matrix4x4[2][2]],
171
- ];
172
- expect(IsValidRotationMatrix(rotationMatrix)).toBe(true);
173
- });
174
- });
175
- describe('QuaternionFromTransformationMatrix', () => {
176
- test('should extract rotation from 4x4 identity matrix', () => {
177
- const matrix4x4 = [
178
- [1, 0, 0, 0],
179
- [0, 1, 0, 0],
180
- [0, 0, 1, 0],
181
- [0, 0, 0, 1],
182
- ];
183
- const quaternion = QuaternionFromTransformationMatrix(matrix4x4);
184
- const expected = QuaternionIdentity();
185
- expect(QuaternionEquals(quaternion, expected, TOLERANCE, true)).toBe(true);
186
- });
187
- test('should extract rotation ignoring translation', () => {
188
- const matrix4x4 = [
189
- [1, 0, 0, 5], // Translation in X
190
- [0, 1, 0, 10], // Translation in Y
191
- [0, 0, 1, 15], // Translation in Z
192
- [0, 0, 0, 1],
193
- ];
194
- const quaternion = QuaternionFromTransformationMatrix(matrix4x4);
195
- const expected = QuaternionIdentity();
196
- expect(QuaternionEquals(quaternion, expected, TOLERANCE, true)).toBe(true);
197
- });
198
- test('should extract rotation with translation present', () => {
199
- // Create a Z-rotation matrix with translation
200
- const cos90 = Math.cos(DegreesToRadians(90));
201
- const sin90 = Math.sin(DegreesToRadians(90));
202
- const matrix4x4 = [
203
- [cos90, -sin90, 0, 100],
204
- [sin90, cos90, 0, 200],
205
- [0, 0, 1, 300],
206
- [0, 0, 0, 1],
207
- ];
208
- const quaternion = QuaternionFromTransformationMatrix(matrix4x4);
209
- const expected = QuaternionRotationZ(DegreesToRadians(90));
210
- expect(QuaternionEquals(quaternion, expected, TOLERANCE, true)).toBe(true);
211
- });
212
- test('should throw for invalid matrix structure', () => {
213
- const invalidMatrix = [[1, 0], [0, 1]];
214
- expect(() => QuaternionFromTransformationMatrix(invalidMatrix)).toThrow();
215
- });
216
- });
217
- describe('IsValidRotationMatrix', () => {
218
- test('should validate identity matrix', () => {
219
- const identityMatrix = [
220
- [1, 0, 0],
221
- [0, 1, 0],
222
- [0, 0, 1],
223
- ];
224
- expect(IsValidRotationMatrix(identityMatrix)).toBe(true);
225
- });
226
- test('should validate proper rotation matrices', () => {
227
- // 90-degree rotation around Z-axis
228
- const rotationZ = [
229
- [0, -1, 0],
230
- [1, 0, 0],
231
- [0, 0, 1],
232
- ];
233
- expect(IsValidRotationMatrix(rotationZ)).toBe(true);
234
- });
235
- test('should reject non-orthogonal matrix', () => {
236
- const nonOrthogonal = [
237
- [1, 1, 0], // Not orthogonal
238
- [0, 1, 0],
239
- [0, 0, 1],
240
- ];
241
- expect(IsValidRotationMatrix(nonOrthogonal)).toBe(false);
242
- });
243
- test('should reject matrix with non-unit column vectors', () => {
244
- const nonUnit = [
245
- [2, 0, 0], // Column 1 has length 2, not 1
246
- [0, 1, 0],
247
- [0, 0, 1],
248
- ];
249
- expect(IsValidRotationMatrix(nonUnit)).toBe(false);
250
- });
251
- test('should reject matrix with determinant -1 (reflection)', () => {
252
- const reflection = [
253
- [-1, 0, 0], // Reflection, det = -1
254
- [0, 1, 0],
255
- [0, 0, 1],
256
- ];
257
- expect(IsValidRotationMatrix(reflection)).toBe(false);
258
- });
259
- test('should respect custom tolerance', () => {
260
- const almostValid = [
261
- [1.0001, 0, 0], // Slightly off from 1
262
- [0, 1, 0],
263
- [0, 0, 1],
264
- ];
265
- expect(IsValidRotationMatrix(almostValid, 1e-6)).toBe(false);
266
- expect(IsValidRotationMatrix(almostValid, 1e-3)).toBe(true);
267
- });
268
- test('should validate complex rotation matrix', () => {
269
- // 45-degree rotation around Y-axis
270
- const cos45 = Math.cos(DegreesToRadians(45));
271
- const sin45 = Math.sin(DegreesToRadians(45));
272
- const rotationY = [
273
- [cos45, 0, sin45],
274
- [0, 1, 0],
275
- [-sin45, 0, cos45],
276
- ];
277
- expect(IsValidRotationMatrix(rotationY)).toBe(true);
278
- });
279
- });
280
- describe('Round-trip conversions', () => {
281
- test('quaternion -> matrix -> quaternion should preserve rotation', () => {
282
- const originalQuaternion = QuaternionRotationX(DegreesToRadians(45));
283
- const matrix = QuaternionToRotationMatrix(originalQuaternion);
284
- const convertedQuaternion = QuaternionFromRotationMatrix(matrix);
285
- expect(QuaternionEquals(originalQuaternion, convertedQuaternion, TOLERANCE, true)).toBe(true);
286
- });
287
- test('matrix -> quaternion -> matrix should preserve matrix', () => {
288
- const originalMatrix = [
289
- [0, -1, 0],
290
- [1, 0, 0],
291
- [0, 0, 1],
292
- ];
293
- const quaternion = QuaternionFromRotationMatrix(originalMatrix);
294
- const convertedMatrix = QuaternionToRotationMatrix(quaternion);
295
- // Compare each element
296
- for (let i = 0; i < 3; i++) {
297
- const originalRow = originalMatrix[i];
298
- AssertMatrixRow(originalRow);
299
- const convertedRow = convertedMatrix[i];
300
- AssertMatrixRow(convertedRow);
301
- for (let j = 0; j < 3; j++) {
302
- const originalValue = originalRow[j];
303
- AssertMatrixValue(originalValue);
304
- const convertedValue = convertedRow[j];
305
- AssertMatrixValue(convertedValue);
306
- expect(convertedValue).toBeCloseTo(originalValue, 5);
307
- }
308
- }
309
- });
310
- test('quaternion -> 4x4 matrix -> quaternion should preserve rotation', () => {
311
- const originalQuaternion = QuaternionRotationY(DegreesToRadians(60));
312
- const matrix4x4 = QuaternionToTransformationMatrix(originalQuaternion);
313
- const convertedQuaternion = QuaternionFromTransformationMatrix(matrix4x4);
314
- expect(QuaternionEquals(originalQuaternion, convertedQuaternion, TOLERANCE, true)).toBe(true);
315
- });
316
- });
317
- describe('Edge cases and error conditions', () => {
318
- test('should handle zero quaternion input for conversion functions', () => {
319
- const zeroQuaternion = [0, 0, 0, 0];
320
- expect(() => QuaternionToRotationMatrix(zeroQuaternion)).toThrow(QuaternionError);
321
- });
322
- test('should handle very small quaternion components', () => {
323
- const smallQuaternion = QuaternionNormalize([1e-10, 1e-10, 1e-10, 1e-10]);
324
- const matrix = QuaternionToRotationMatrix(smallQuaternion);
325
- const convertedBack = QuaternionFromRotationMatrix(matrix);
326
- expect(QuaternionEquals(smallQuaternion, convertedBack, TOLERANCE, true)).toBe(true);
327
- });
328
- test('should handle matrices from known quaternion conversions', () => {
329
- // Test all the branch conditions in QuaternionFromRotationMatrix
330
- const testQuaternions = [
331
- QuaternionRotationX(DegreesToRadians(30)),
332
- QuaternionRotationY(DegreesToRadians(60)),
333
- QuaternionRotationZ(DegreesToRadians(120)),
334
- QuaternionNormalize([0.5, 0.5, 0.5, 0.5]),
335
- ];
336
- for (const quaternion of testQuaternions) {
337
- const matrix = QuaternionToRotationMatrix(quaternion);
338
- const convertedBack = QuaternionFromRotationMatrix(matrix);
339
- expect(QuaternionEquals(quaternion, convertedBack, TOLERANCE, true)).toBe(true);
340
- }
341
- });
342
- });
343
- });
344
- //# sourceMappingURL=conversions.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversions.spec.js","sourceRoot":"","sources":["../../src/quaternions/conversions.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=core.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.spec.d.ts","sourceRoot":"","sources":["../../src/quaternions/core.spec.ts"],"names":[],"mappings":""}