@pawells/math-extended 1.0.5 → 2.0.0
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.
- package/README.md +5 -5
- package/build/angles.d.ts +43 -3
- package/build/angles.d.ts.map +1 -1
- package/build/angles.js +61 -34
- package/build/angles.js.map +1 -1
- package/build/clamp.d.ts +5 -3
- package/build/clamp.d.ts.map +1 -1
- package/build/clamp.js +5 -3
- package/build/clamp.js.map +1 -1
- package/build/interpolation.d.ts +444 -67
- package/build/interpolation.d.ts.map +1 -1
- package/build/interpolation.js +444 -67
- package/build/interpolation.js.map +1 -1
- package/build/matrices/_exports.d.ts +13 -0
- package/build/matrices/_exports.d.ts.map +1 -0
- package/build/matrices/_exports.js +13 -0
- package/build/matrices/_exports.js.map +1 -0
- package/build/matrices/arithmetic.d.ts +170 -181
- package/build/matrices/arithmetic.d.ts.map +1 -1
- package/build/matrices/arithmetic.js +192 -202
- package/build/matrices/arithmetic.js.map +1 -1
- package/build/matrices/asserts.d.ts +244 -116
- package/build/matrices/asserts.d.ts.map +1 -1
- package/build/matrices/asserts.js +291 -94
- package/build/matrices/asserts.js.map +1 -1
- package/build/matrices/core.d.ts +40 -41
- package/build/matrices/core.d.ts.map +1 -1
- package/build/matrices/core.js +12 -13
- package/build/matrices/core.js.map +1 -1
- package/build/matrices/decompositions.d.ts +121 -124
- package/build/matrices/decompositions.d.ts.map +1 -1
- package/build/matrices/decompositions.js +168 -226
- package/build/matrices/decompositions.js.map +1 -1
- package/build/matrices/index.d.ts +3 -2
- package/build/matrices/index.d.ts.map +1 -1
- package/build/matrices/index.js +5 -2
- package/build/matrices/index.js.map +1 -1
- package/build/matrices/linear-algebra.d.ts +18 -13
- package/build/matrices/linear-algebra.d.ts.map +1 -1
- package/build/matrices/linear-algebra.js +58 -23
- package/build/matrices/linear-algebra.js.map +1 -1
- package/build/matrices/normalization.d.ts +8 -8
- package/build/matrices/transformations.d.ts +184 -168
- package/build/matrices/transformations.d.ts.map +1 -1
- package/build/matrices/transformations.js +99 -83
- package/build/matrices/transformations.js.map +1 -1
- package/build/matrices/types.d.ts +12 -12
- package/build/matrices/types.d.ts.map +1 -1
- package/build/quaternions/_exports.d.ts +11 -0
- package/build/quaternions/_exports.d.ts.map +1 -0
- package/build/quaternions/_exports.js +11 -0
- package/build/quaternions/_exports.js.map +1 -0
- package/build/quaternions/asserts.d.ts +115 -7
- package/build/quaternions/asserts.d.ts.map +1 -1
- package/build/quaternions/asserts.js +162 -8
- package/build/quaternions/asserts.js.map +1 -1
- package/build/quaternions/conversions.d.ts +31 -21
- package/build/quaternions/conversions.d.ts.map +1 -1
- package/build/quaternions/conversions.js +28 -18
- package/build/quaternions/conversions.js.map +1 -1
- package/build/quaternions/core.d.ts +73 -41
- package/build/quaternions/core.d.ts.map +1 -1
- package/build/quaternions/core.js +84 -49
- package/build/quaternions/core.js.map +1 -1
- package/build/quaternions/index.d.ts +3 -2
- package/build/quaternions/index.d.ts.map +1 -1
- package/build/quaternions/index.js +5 -2
- package/build/quaternions/index.js.map +1 -1
- package/build/quaternions/interpolation.d.ts +15 -9
- package/build/quaternions/interpolation.d.ts.map +1 -1
- package/build/quaternions/interpolation.js +15 -9
- package/build/quaternions/interpolation.js.map +1 -1
- package/build/quaternions/predefined.d.ts +9 -3
- package/build/quaternions/predefined.d.ts.map +1 -1
- package/build/quaternions/predefined.js +9 -3
- package/build/quaternions/predefined.js.map +1 -1
- package/build/quaternions/types.d.ts +3 -3
- package/build/random.d.ts +5 -2
- package/build/random.d.ts.map +1 -1
- package/build/random.js +20 -17
- package/build/random.js.map +1 -1
- package/build/vectors/_exports.d.ts +10 -0
- package/build/vectors/_exports.d.ts.map +1 -0
- package/build/vectors/_exports.js +10 -0
- package/build/vectors/_exports.js.map +1 -0
- package/build/vectors/asserts.d.ts +153 -49
- package/build/vectors/asserts.d.ts.map +1 -1
- package/build/vectors/asserts.js +202 -52
- package/build/vectors/asserts.js.map +1 -1
- package/build/vectors/core.d.ts +216 -137
- package/build/vectors/core.d.ts.map +1 -1
- package/build/vectors/core.js +217 -158
- package/build/vectors/core.js.map +1 -1
- package/build/vectors/index.d.ts +1 -0
- package/build/vectors/index.d.ts.map +1 -1
- package/build/vectors/index.js +3 -0
- package/build/vectors/index.js.map +1 -1
- package/build/vectors/interpolation.d.ts +39 -27
- package/build/vectors/interpolation.d.ts.map +1 -1
- package/build/vectors/interpolation.js +39 -27
- package/build/vectors/interpolation.js.map +1 -1
- package/build/vectors/predefined.d.ts +48 -24
- package/build/vectors/predefined.d.ts.map +1 -1
- package/build/vectors/predefined.js +38 -18
- package/build/vectors/predefined.js.map +1 -1
- package/package.json +12 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asserts.d.ts","sourceRoot":"","sources":["../../src/quaternions/asserts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpF;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,WAAW;
|
|
1
|
+
{"version":3,"file":"asserts.d.ts","sourceRoot":"","sources":["../../src/quaternions/asserts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpF;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC/C,SAAgB,IAAI,EAAE,MAAM,CAAsB;IAElD;;;;;;OAMG;gBACS,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI1D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,UAAU,IAAI,WAAW,CAkB9H;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,GAAE,MAAa,GAAG,IAAI,CASlG;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAiBtH;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAiB1H;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,MAAM,IAAI,eAAe,CA0B9H;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,WAAW,IAAI,WAAW,EAAE,CAerI;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,UAAU,IAAI,WAAW,CAOxH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,GAAE,MAAa,GAAG,OAAO,CAOvG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,KAAK,IAAI,YAAY,CAOhH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,SAAS,IAAI,UAAU,CAOpH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,MAAM,IAAI,eAAe,CAOxH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,WAAW,IAAI,WAAW,EAAE,CAO/H"}
|
|
@@ -8,8 +8,16 @@ import { AssertVector, VectorError } from '../vectors/asserts.js';
|
|
|
8
8
|
* Extends the base VectorError to maintain consistency with vector operations.
|
|
9
9
|
*/
|
|
10
10
|
export class QuaternionError extends VectorError {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
code = 'QUATERNION_ERROR';
|
|
12
|
+
/**
|
|
13
|
+
* Creates a new QuaternionError instance.
|
|
14
|
+
*
|
|
15
|
+
* @param message - Error message describing the validation failure
|
|
16
|
+
* @param options - Optional error context
|
|
17
|
+
* @param options.cause - Original error that caused this error
|
|
18
|
+
*/
|
|
19
|
+
constructor(message, options) {
|
|
20
|
+
super(message, options);
|
|
13
21
|
this.name = 'QuaternionError';
|
|
14
22
|
}
|
|
15
23
|
}
|
|
@@ -22,9 +30,11 @@ export class QuaternionError extends VectorError {
|
|
|
22
30
|
* @throws {QuaternionError} If the quaternion is invalid
|
|
23
31
|
*
|
|
24
32
|
* @example
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
33
|
+
* ```typescript
|
|
34
|
+
* AssertQuaternion([0, 0, 0, 1]); // Valid - passes silently
|
|
35
|
+
* AssertQuaternion([1, 2, 3]); // Throws QuaternionError - wrong length
|
|
36
|
+
* AssertQuaternion([1, 2, 3, NaN]); // Throws QuaternionError - contains NaN
|
|
37
|
+
* ```
|
|
28
38
|
*/
|
|
29
39
|
export function AssertQuaternion(quaternion, options = {}) {
|
|
30
40
|
if (!Array.isArray(quaternion)) {
|
|
@@ -53,8 +63,10 @@ export function AssertQuaternion(quaternion, options = {}) {
|
|
|
53
63
|
* @throws {QuaternionError} If the quaternion is not normalized
|
|
54
64
|
*
|
|
55
65
|
* @example
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
* ```typescript
|
|
67
|
+
* AssertNormalizedQuaternion([0, 0, 0, 1]); // Valid unit quaternion
|
|
68
|
+
* AssertNormalizedQuaternion([1, 1, 1, 1]); // Throws - not normalized
|
|
69
|
+
* ```
|
|
58
70
|
*/
|
|
59
71
|
export function AssertNormalizedQuaternion(quaternion, tolerance = 1e-6) {
|
|
60
72
|
AssertQuaternion(quaternion);
|
|
@@ -116,7 +128,7 @@ export function AssertAxisAngle(axisAngle, options = {}) {
|
|
|
116
128
|
}
|
|
117
129
|
/**
|
|
118
130
|
* Validates that a value is a proper rotation matrix.
|
|
119
|
-
* Rotation matrix must be a 3x3 matrix (
|
|
131
|
+
* Rotation matrix must be a 3x3 matrix (TMatrix3).
|
|
120
132
|
*
|
|
121
133
|
* @param matrix - The value to validate as a rotation matrix
|
|
122
134
|
* @param options - Validation options
|
|
@@ -172,4 +184,146 @@ export function AssertQuaternions(quaternions, options = {}) {
|
|
|
172
184
|
}
|
|
173
185
|
}
|
|
174
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Validates that an unknown value is a valid quaternion without throwing an error.
|
|
189
|
+
*
|
|
190
|
+
* This function performs the same validation as AssertQuaternion but returns
|
|
191
|
+
* a boolean instead of throwing an exception, making it suitable for
|
|
192
|
+
* conditional logic where exceptions are not desired.
|
|
193
|
+
*
|
|
194
|
+
* @param quaternion - The value to validate as a quaternion
|
|
195
|
+
* @param options - Validation options
|
|
196
|
+
* @returns true if the quaternion is valid, false otherwise
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* if (ValidateQuaternion(someValue)) {
|
|
201
|
+
* // Process the valid quaternion
|
|
202
|
+
* }
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
export function ValidateQuaternion(quaternion, options = {}) {
|
|
206
|
+
try {
|
|
207
|
+
AssertQuaternion(quaternion, options);
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Validates that a quaternion is normalized (magnitude = 1) without throwing an error.
|
|
216
|
+
*
|
|
217
|
+
* @param quaternion - The quaternion to validate as normalized
|
|
218
|
+
* @param tolerance - Maximum allowed deviation from unit magnitude (default: 1e-6)
|
|
219
|
+
* @returns true if the quaternion is normalized, false otherwise
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```typescript
|
|
223
|
+
* if (ValidateNormalizedQuaternion([1, 0, 0, 0])) {
|
|
224
|
+
* // Process the normalized quaternion
|
|
225
|
+
* }
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
export function ValidateNormalizedQuaternion(quaternion, tolerance = 1e-6) {
|
|
229
|
+
try {
|
|
230
|
+
AssertNormalizedQuaternion(quaternion, tolerance);
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Validates that an unknown value is valid Euler angles without throwing an error.
|
|
239
|
+
*
|
|
240
|
+
* @param euler - The value to validate as Euler angles
|
|
241
|
+
* @param options - Validation options
|
|
242
|
+
* @returns true if the Euler angles are valid, false otherwise
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```typescript
|
|
246
|
+
* if (ValidateEulerAngles([0.5, 1.0, 1.5])) {
|
|
247
|
+
* // Process the valid Euler angles
|
|
248
|
+
* }
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
export function ValidateEulerAngles(euler, options = {}) {
|
|
252
|
+
try {
|
|
253
|
+
AssertEulerAngles(euler, options);
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Validates that an unknown value is a valid axis-angle representation without throwing an error.
|
|
262
|
+
*
|
|
263
|
+
* @param axisAngle - The value to validate as axis-angle
|
|
264
|
+
* @param options - Validation options
|
|
265
|
+
* @returns true if the axis-angle is valid, false otherwise
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* if (ValidateAxisAngle({ axis: [0, 0, 1], angle: Math.PI / 2 })) {
|
|
270
|
+
* // Process the valid axis-angle
|
|
271
|
+
* }
|
|
272
|
+
* ```
|
|
273
|
+
*/
|
|
274
|
+
export function ValidateAxisAngle(axisAngle, options = {}) {
|
|
275
|
+
try {
|
|
276
|
+
AssertAxisAngle(axisAngle, options);
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Validates that an unknown value is a valid rotation matrix without throwing an error.
|
|
285
|
+
*
|
|
286
|
+
* @param matrix - The value to validate as a rotation matrix
|
|
287
|
+
* @param options - Validation options
|
|
288
|
+
* @returns true if the matrix is a valid rotation matrix, false otherwise
|
|
289
|
+
*
|
|
290
|
+
* @example
|
|
291
|
+
* ```typescript
|
|
292
|
+
* if (ValidateRotationMatrix(someValue)) {
|
|
293
|
+
* // Process the valid rotation matrix
|
|
294
|
+
* }
|
|
295
|
+
* ```
|
|
296
|
+
*/
|
|
297
|
+
export function ValidateRotationMatrix(matrix, options = {}) {
|
|
298
|
+
try {
|
|
299
|
+
AssertRotationMatrix(matrix, options);
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Validates that an unknown value is an array of valid quaternions without throwing an error.
|
|
308
|
+
*
|
|
309
|
+
* @param quaternions - The value to validate as an array of quaternions
|
|
310
|
+
* @param options - Validation options
|
|
311
|
+
* @returns true if all quaternions are valid, false otherwise
|
|
312
|
+
*
|
|
313
|
+
* @example
|
|
314
|
+
* ```typescript
|
|
315
|
+
* if (ValidateQuaternions([q1, q2, q3])) {
|
|
316
|
+
* // Process the valid quaternion array
|
|
317
|
+
* }
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
export function ValidateQuaternions(quaternions, options = {}) {
|
|
321
|
+
try {
|
|
322
|
+
AssertQuaternions(quaternions, options);
|
|
323
|
+
return true;
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
175
329
|
//# sourceMappingURL=asserts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asserts.js","sourceRoot":"","sources":["../../src/quaternions/asserts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGlE;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC/
|
|
1
|
+
{"version":3,"file":"asserts.js","sourceRoot":"","sources":["../../src/quaternions/asserts.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,32 +2,36 @@
|
|
|
2
2
|
* Conversion utilities for quaternions and various rotation representations.
|
|
3
3
|
* Provides comprehensive conversion between different rotation formats.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { TMatrix4 } from '../matrices/types.js';
|
|
6
6
|
import { TQuaternion, TRotationMatrix } from './types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Converts a quaternion to a 3x3 rotation matrix.
|
|
9
|
-
* The matrix is returned as a proper
|
|
9
|
+
* The matrix is returned as a proper TMatrix3 type.
|
|
10
10
|
*
|
|
11
11
|
* @param quaternion - The normalized quaternion to convert
|
|
12
|
-
* @returns 3x3 rotation matrix as
|
|
12
|
+
* @returns 3x3 rotation matrix as TMatrix3
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const q = [0, 0, 0.707, 0.707]; // 90° rotation around Z-axis
|
|
17
|
+
* const matrix = QuaternionToRotationMatrix(q);
|
|
18
|
+
* // matrix represents rotation that transforms +X to +Y
|
|
19
|
+
* ```
|
|
18
20
|
*/
|
|
19
21
|
export declare function QuaternionToRotationMatrix(quaternion: TQuaternion): TRotationMatrix;
|
|
20
22
|
/**
|
|
21
23
|
* Converts a 3x3 rotation matrix to a quaternion.
|
|
22
|
-
* The matrix should be a proper
|
|
24
|
+
* The matrix should be a proper TMatrix3 type.
|
|
23
25
|
*
|
|
24
|
-
* @param matrix - 3x3 rotation matrix as
|
|
26
|
+
* @param matrix - 3x3 rotation matrix as TMatrix3
|
|
25
27
|
* @returns Normalized quaternion representing the same rotation
|
|
26
28
|
*
|
|
27
29
|
* @example
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const identityMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];
|
|
32
|
+
* const q = QuaternionFromRotationMatrix(identityMatrix);
|
|
33
|
+
* console.log(q); // [0, 0, 0, 1] (identity quaternion)
|
|
34
|
+
* ```
|
|
31
35
|
*/
|
|
32
36
|
export declare function QuaternionFromRotationMatrix(matrix: TRotationMatrix): TQuaternion;
|
|
33
37
|
/**
|
|
@@ -39,11 +43,13 @@ export declare function QuaternionFromRotationMatrix(matrix: TRotationMatrix): T
|
|
|
39
43
|
* @returns 4x4 transformation matrix as a flat array of 16 elements (row-major)
|
|
40
44
|
*
|
|
41
45
|
* @example
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const q = [0, 0, 0, 1]; // Identity quaternion
|
|
48
|
+
* const matrix4x4 = QuaternionToTransformationMatrix(q);
|
|
49
|
+
* // Returns identity 4x4 matrix
|
|
50
|
+
* ```
|
|
45
51
|
*/
|
|
46
|
-
export declare function QuaternionToTransformationMatrix(quaternion: TQuaternion):
|
|
52
|
+
export declare function QuaternionToTransformationMatrix(quaternion: TQuaternion): TMatrix4;
|
|
47
53
|
/**
|
|
48
54
|
* Extracts the rotation quaternion from a 4x4 transformation matrix.
|
|
49
55
|
* Ignores translation and scaling components, extracting only the rotation.
|
|
@@ -52,11 +58,13 @@ export declare function QuaternionToTransformationMatrix(quaternion: TQuaternion
|
|
|
52
58
|
* @returns Normalized quaternion representing the rotation component
|
|
53
59
|
*
|
|
54
60
|
* @example
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const transformMatrix = [1, 0, 0, 5, 0, 1, 0, 10, 0, 0, 1, 15, 0, 0, 0, 1];
|
|
63
|
+
* const q = QuaternionFromTransformationMatrix(transformMatrix);
|
|
64
|
+
* // Extracts rotation (identity in this case), ignores translation [5, 10, 15]
|
|
65
|
+
* ```
|
|
58
66
|
*/
|
|
59
|
-
export declare function QuaternionFromTransformationMatrix(matrix:
|
|
67
|
+
export declare function QuaternionFromTransformationMatrix(matrix: TMatrix4): TQuaternion;
|
|
60
68
|
/**
|
|
61
69
|
* Checks if a matrix is a valid rotation matrix.
|
|
62
70
|
* A valid rotation matrix should be orthogonal and have determinant +1.
|
|
@@ -66,8 +74,10 @@ export declare function QuaternionFromTransformationMatrix(matrix: IMatrix4): TQ
|
|
|
66
74
|
* @returns True if the matrix is a valid rotation matrix
|
|
67
75
|
*
|
|
68
76
|
* @example
|
|
69
|
-
|
|
70
|
-
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const matrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; // Identity matrix
|
|
79
|
+
* console.log(IsValidRotationMatrix(matrix)); // true
|
|
80
|
+
* ```
|
|
71
81
|
*/
|
|
72
82
|
export declare function IsValidRotationMatrix(matrix: TRotationMatrix, tolerance?: number): boolean;
|
|
73
83
|
//# sourceMappingURL=conversions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversions.d.ts","sourceRoot":"","sources":["../../src/quaternions/conversions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI1D
|
|
1
|
+
{"version":3,"file":"conversions.d.ts","sourceRoot":"","sources":["../../src/quaternions/conversions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI1D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,WAAW,GAAG,eAAe,CAmBnF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,CAyCjF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,WAAW,GAAG,QAAQ,CAUlF;AACD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,CAShF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,GAAE,MAAa,GAAG,OAAO,CAkChG"}
|
|
@@ -6,15 +6,17 @@ import { AssertNormalizedQuaternion, AssertRotationMatrix } from './asserts.js';
|
|
|
6
6
|
const SHEPPERD_QUARTER = 0.25;
|
|
7
7
|
/**
|
|
8
8
|
* Converts a quaternion to a 3x3 rotation matrix.
|
|
9
|
-
* The matrix is returned as a proper
|
|
9
|
+
* The matrix is returned as a proper TMatrix3 type.
|
|
10
10
|
*
|
|
11
11
|
* @param quaternion - The normalized quaternion to convert
|
|
12
|
-
* @returns 3x3 rotation matrix as
|
|
12
|
+
* @returns 3x3 rotation matrix as TMatrix3
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const q = [0, 0, 0.707, 0.707]; // 90° rotation around Z-axis
|
|
17
|
+
* const matrix = QuaternionToRotationMatrix(q);
|
|
18
|
+
* // matrix represents rotation that transforms +X to +Y
|
|
19
|
+
* ```
|
|
18
20
|
*/
|
|
19
21
|
export function QuaternionToRotationMatrix(quaternion) {
|
|
20
22
|
AssertNormalizedQuaternion(quaternion);
|
|
@@ -36,15 +38,17 @@ export function QuaternionToRotationMatrix(quaternion) {
|
|
|
36
38
|
}
|
|
37
39
|
/**
|
|
38
40
|
* Converts a 3x3 rotation matrix to a quaternion.
|
|
39
|
-
* The matrix should be a proper
|
|
41
|
+
* The matrix should be a proper TMatrix3 type.
|
|
40
42
|
*
|
|
41
|
-
* @param matrix - 3x3 rotation matrix as
|
|
43
|
+
* @param matrix - 3x3 rotation matrix as TMatrix3
|
|
42
44
|
* @returns Normalized quaternion representing the same rotation
|
|
43
45
|
*
|
|
44
46
|
* @example
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const identityMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];
|
|
49
|
+
* const q = QuaternionFromRotationMatrix(identityMatrix);
|
|
50
|
+
* console.log(q); // [0, 0, 0, 1] (identity quaternion)
|
|
51
|
+
* ```
|
|
48
52
|
*/
|
|
49
53
|
export function QuaternionFromRotationMatrix(matrix) {
|
|
50
54
|
AssertRotationMatrix(matrix);
|
|
@@ -97,9 +101,11 @@ export function QuaternionFromRotationMatrix(matrix) {
|
|
|
97
101
|
* @returns 4x4 transformation matrix as a flat array of 16 elements (row-major)
|
|
98
102
|
*
|
|
99
103
|
* @example
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
104
|
+
* ```typescript
|
|
105
|
+
* const q = [0, 0, 0, 1]; // Identity quaternion
|
|
106
|
+
* const matrix4x4 = QuaternionToTransformationMatrix(q);
|
|
107
|
+
* // Returns identity 4x4 matrix
|
|
108
|
+
* ```
|
|
103
109
|
*/
|
|
104
110
|
export function QuaternionToTransformationMatrix(quaternion) {
|
|
105
111
|
const rotationMatrix = QuaternionToRotationMatrix(quaternion);
|
|
@@ -119,9 +125,11 @@ export function QuaternionToTransformationMatrix(quaternion) {
|
|
|
119
125
|
* @returns Normalized quaternion representing the rotation component
|
|
120
126
|
*
|
|
121
127
|
* @example
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
128
|
+
* ```typescript
|
|
129
|
+
* const transformMatrix = [1, 0, 0, 5, 0, 1, 0, 10, 0, 0, 1, 15, 0, 0, 0, 1];
|
|
130
|
+
* const q = QuaternionFromTransformationMatrix(transformMatrix);
|
|
131
|
+
* // Extracts rotation (identity in this case), ignores translation [5, 10, 15]
|
|
132
|
+
* ```
|
|
125
133
|
*/
|
|
126
134
|
export function QuaternionFromTransformationMatrix(matrix) {
|
|
127
135
|
// Extract 3x3 rotation matrix from 4x4 transformation matrix
|
|
@@ -141,8 +149,10 @@ export function QuaternionFromTransformationMatrix(matrix) {
|
|
|
141
149
|
* @returns True if the matrix is a valid rotation matrix
|
|
142
150
|
*
|
|
143
151
|
* @example
|
|
144
|
-
|
|
145
|
-
|
|
152
|
+
* ```typescript
|
|
153
|
+
* const matrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; // Identity matrix
|
|
154
|
+
* console.log(IsValidRotationMatrix(matrix)); // true
|
|
155
|
+
* ```
|
|
146
156
|
*/
|
|
147
157
|
export function IsValidRotationMatrix(matrix, tolerance = 1e-6) {
|
|
148
158
|
AssertRotationMatrix(matrix);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversions.js","sourceRoot":"","sources":["../../src/quaternions/conversions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGhF,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B
|
|
1
|
+
{"version":3,"file":"conversions.js","sourceRoot":"","sources":["../../src/quaternions/conversions.ts"],"names":[],"mappings":"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"}
|