linearly 0.36.0 → 0.37.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.
Files changed (47) hide show
  1. package/lib/esm/mat2.d.ts +1 -1
  2. package/lib/esm/mat2.d.ts.map +1 -1
  3. package/lib/esm/mat2.js +3 -2
  4. package/lib/esm/mat2d.d.ts.map +1 -1
  5. package/lib/esm/mat2d.js +4 -5
  6. package/lib/esm/mat3.d.ts.map +1 -1
  7. package/lib/esm/mat3.js +16 -15
  8. package/lib/esm/mat4.d.ts.map +1 -1
  9. package/lib/esm/mat4.js +18 -17
  10. package/lib/esm/quat.js +3 -3
  11. package/lib/esm/scalar.d.ts +6 -35
  12. package/lib/esm/scalar.d.ts.map +1 -1
  13. package/lib/esm/scalar.js +11 -53
  14. package/package.json +9 -4
  15. package/lib/cjs/common.d.ts +0 -16
  16. package/lib/cjs/common.d.ts.map +0 -1
  17. package/lib/cjs/common.js +0 -70
  18. package/lib/cjs/index.d.ts +0 -10
  19. package/lib/cjs/index.d.ts.map +0 -1
  20. package/lib/cjs/index.js +0 -22
  21. package/lib/cjs/mat2.d.ts +0 -272
  22. package/lib/cjs/mat2.d.ts.map +0 -1
  23. package/lib/cjs/mat2.js +0 -473
  24. package/lib/cjs/mat2d.d.ts +0 -329
  25. package/lib/cjs/mat2d.d.ts.map +0 -1
  26. package/lib/cjs/mat2d.js +0 -641
  27. package/lib/cjs/mat3.d.ts +0 -295
  28. package/lib/cjs/mat3.d.ts.map +0 -1
  29. package/lib/cjs/mat3.js +0 -670
  30. package/lib/cjs/mat4.d.ts +0 -532
  31. package/lib/cjs/mat4.d.ts.map +0 -1
  32. package/lib/cjs/mat4.js +0 -1576
  33. package/lib/cjs/quat.d.ts +0 -334
  34. package/lib/cjs/quat.d.ts.map +0 -1
  35. package/lib/cjs/quat.js +0 -802
  36. package/lib/cjs/scalar.d.ts +0 -501
  37. package/lib/cjs/scalar.d.ts.map +0 -1
  38. package/lib/cjs/scalar.js +0 -728
  39. package/lib/cjs/vec2.d.ts +0 -664
  40. package/lib/cjs/vec2.d.ts.map +0 -1
  41. package/lib/cjs/vec2.js +0 -1247
  42. package/lib/cjs/vec3.d.ts +0 -660
  43. package/lib/cjs/vec3.d.ts.map +0 -1
  44. package/lib/cjs/vec3.js +0 -1329
  45. package/lib/cjs/vec4.d.ts +0 -552
  46. package/lib/cjs/vec4.d.ts.map +0 -1
  47. package/lib/cjs/vec4.js +0 -1200
package/lib/cjs/mat2d.js DELETED
@@ -1,641 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.mat2d = void 0;
37
- const Common = __importStar(require("./common"));
38
- const mat2_1 = require("./mat2");
39
- const vec2_1 = require("./vec2");
40
- /**
41
- * Functions for {@link mat2d}, 2D affine transformation (translation, rotation, scaling, skewing).
42
- * @see https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix
43
- * @category Modules
44
- */
45
- var mat2d;
46
- (function (mat2d) {
47
- /**
48
- * Creates a new matrix from given elements
49
- * @category Generators
50
- */
51
- // prettier-ignore
52
- function of(a, b, c, d, tx, ty) {
53
- return [a, b, c, d, tx, ty];
54
- }
55
- mat2d.of = of;
56
- /**
57
- * Creates a mutable clone of given mat2d
58
- * @category Generators
59
- */
60
- function clone(a) {
61
- return [...a];
62
- }
63
- mat2d.clone = clone;
64
- /**
65
- * The identity matrix of mat2d
66
- * ```ts
67
- * [1, 0,
68
- * 0, 1,
69
- * 0, 0]
70
- * ```
71
- * @category Constants
72
- *
73
- * @shorthands
74
- * - {@link id}
75
- * - {@link ident}
76
- */
77
- // prettier-ignore
78
- mat2d.identity = Object.freeze([
79
- 1, 0,
80
- 0, 1,
81
- 0, 0
82
- ]);
83
- /**
84
- * Alias for {@link identity}
85
- * @category Shorthands
86
- */
87
- mat2d.I = mat2d.identity;
88
- /**
89
- * Alias for {@link identity}
90
- * @category Shorthands
91
- */
92
- mat2d.id = mat2d.identity;
93
- /**
94
- * Alias for {@link identity}
95
- * @category Shorthands
96
- */
97
- mat2d.ident = mat2d.identity;
98
- /**
99
- * The mat2d matrix filled with zeros.
100
- * @category Constants
101
- */
102
- mat2d.zero = Object.freeze([0, 0, 0, 0, 0, 0]);
103
- /**
104
- * Inverts a mat2d
105
- *
106
- * @shorthands
107
- * - {@link inv}
108
- */
109
- function invert(a) {
110
- const [aa, ab, ac, ad, atx, aty] = a;
111
- const det = aa * ad - ab * ac;
112
- if (!det) {
113
- return null;
114
- }
115
- const detinv = 1 / det;
116
- // prettier-ignore
117
- return [
118
- ad * detinv, -ab * detinv,
119
- -ac * detinv, aa * detinv,
120
- (ac * aty - ad * atx) * detinv,
121
- (ab * atx - aa * aty) * detinv,
122
- ];
123
- }
124
- mat2d.invert = invert;
125
- /**
126
- * Alias for {@link invert}
127
- * @category Shorthands
128
- */
129
- mat2d.inv = invert;
130
- /**
131
- * Calculates the determinant of a mat2d
132
- *
133
- * @shorthands
134
- * - {@link det}
135
- */
136
- function determinant(a) {
137
- return a[0] * a[3] - a[1] * a[2];
138
- }
139
- mat2d.determinant = determinant;
140
- /**
141
- * Alias for {@link determinant}
142
- * @category Shorthands
143
- */
144
- mat2d.det = determinant;
145
- /**
146
- * Multiplies given mat2d's
147
- *
148
- * @shorthands
149
- * - {@link mul}
150
- */
151
- function multiply(...ms) {
152
- if (ms.length === 0) {
153
- return mat2d.identity;
154
- }
155
- else if (ms.length === 1) {
156
- return ms[0];
157
- }
158
- else if (ms.length > 2) {
159
- const [a, b, ...rest] = ms;
160
- return multiply(multiply(a, b), ...rest);
161
- }
162
- const [a, b] = ms;
163
- const [a0, a1, a2, a3, a4, a5] = a;
164
- const [b0, b1, b2, b3, b4, b5] = b;
165
- // prettier-ignore
166
- return [
167
- a0 * b0 + a2 * b1, a1 * b0 + a3 * b1,
168
- a0 * b2 + a2 * b3, a1 * b2 + a3 * b3,
169
- a0 * b4 + a2 * b5 + a4,
170
- a1 * b4 + a3 * b5 + a5,
171
- ];
172
- }
173
- mat2d.multiply = multiply;
174
- /**
175
- * Alias for {@link multiply}
176
- * @category Shorthands
177
- */
178
- mat2d.mul = multiply;
179
- /**
180
- * Rotates a mat2d by the given angle
181
- */
182
- function rotate(m, deg, origin) {
183
- if (origin) {
184
- if (origin) {
185
- return pivot(rotate(m, deg), origin);
186
- }
187
- }
188
- const [a0, a1, a2, a3, tx, ty] = m;
189
- const s = Math.sin(deg * Common.DEG2RAD);
190
- const c = Math.cos(deg * Common.DEG2RAD);
191
- // prettier-ignore
192
- return [
193
- a0 * c + a2 * s, a1 * c + a3 * s,
194
- a0 * -s + a2 * c, a1 * -s + a3 * c,
195
- tx, ty
196
- ];
197
- }
198
- mat2d.rotate = rotate;
199
- /**
200
- * Scales the mat2d by the dimensions in the given vec2
201
- **/
202
- function scale(m, s, origin) {
203
- if (origin) {
204
- return pivot(scale(m, s), origin);
205
- }
206
- const [a0, a1, a2, a3, tx, ty] = m;
207
- const [sx, sy] = s;
208
- // prettier-ignore
209
- return [
210
- a0 * sx, a1 * sx,
211
- a2 * sy, a3 * sy,
212
- tx, ty
213
- ];
214
- }
215
- mat2d.scale = scale;
216
- /**
217
- * Translates the mat2d by the dimensions in the given vec2
218
- **/
219
- function translate(m, v) {
220
- const [a, b, c, d, tx, ty] = m;
221
- const [x, y] = v;
222
- // prettier-ignore
223
- return [
224
- a, b,
225
- c, d,
226
- a * x + c * y + tx,
227
- b * x + d * y + ty
228
- ];
229
- }
230
- mat2d.translate = translate;
231
- /**
232
- * Applies a transformation around a given origin point
233
- */
234
- function pivot(m, origin) {
235
- return multiply(fromTranslation(origin), m, fromTranslation(vec2_1.vec2.negate(origin)));
236
- }
237
- mat2d.pivot = pivot;
238
- /**
239
- * Applies skew to the mat2d by the given angles in degrees
240
- * @see https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew
241
- */
242
- function skew(m, deg, origin) {
243
- return multiply(m, fromSkew(deg, origin));
244
- }
245
- mat2d.skew = skew;
246
- /**
247
- * Creates a matrix from a given angle.
248
- * @param deg The angle to rotate the matrix by, in degrees
249
- * @category Generators
250
- *
251
- * @shorthands
252
- * - {@link rotation}
253
- */
254
- function fromRotation(deg, origin) {
255
- if (origin) {
256
- return pivot(fromRotation(deg), origin);
257
- }
258
- const s = Math.sin(deg * Common.DEG2RAD);
259
- const c = Math.cos(deg * Common.DEG2RAD);
260
- // prettier-ignore
261
- return [
262
- c, s,
263
- -s, c,
264
- 0, 0,
265
- ];
266
- }
267
- mat2d.fromRotation = fromRotation;
268
- /**
269
- * Alias for {@link fromRotation}
270
- * @category Shorthands
271
- */
272
- mat2d.rotation = fromRotation;
273
- /**
274
- * Creates a matrix from a vector scaling
275
- * @category Generators
276
- *
277
- * @shorthands
278
- * - {@link scaling}
279
- */
280
- function fromScaling(v, origin) {
281
- if (origin) {
282
- return pivot(fromScaling(v), origin);
283
- }
284
- const [x, y] = typeof v === 'number' ? [v, v] : v;
285
- // prettier-ignore
286
- return [
287
- x, 0,
288
- 0, y,
289
- 0, 0,
290
- ];
291
- }
292
- mat2d.fromScaling = fromScaling;
293
- /**
294
- * Alias for {@link fromScaling}
295
- * @category Shorthands
296
- */
297
- mat2d.scaling = fromScaling;
298
- /**
299
- * Creates a matrix from a vector translation
300
- * @category Generators
301
- *
302
- * @shorthands
303
- * - {@link translation}
304
- */
305
- function fromTranslation(v) {
306
- const [x, y] = typeof v === 'number' ? [v, v] : v;
307
- // prettier-ignore
308
- return [
309
- 1, 0,
310
- 0, 1,
311
- x, y,
312
- ];
313
- }
314
- mat2d.fromTranslation = fromTranslation;
315
- /**
316
- * Alias for {@link fromTranslation}
317
- * @category Shorthands
318
- */
319
- mat2d.translation = fromTranslation;
320
- /**
321
- * Creates a matrix from a vector skew
322
- * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew
323
- * @category Generators
324
- *
325
- * @shorthands
326
- * - {@link skewing}
327
- */
328
- function fromSkew(deg, origin) {
329
- if (origin) {
330
- return pivot(fromSkew(deg), origin);
331
- }
332
- const [ax, ay] = deg;
333
- const x = Math.tan(ax * Common.DEG2RAD);
334
- const y = Math.tan(ay * Common.DEG2RAD);
335
- // prettier-ignore
336
- return [
337
- 1, y,
338
- x, 1,
339
- 0, 0,
340
- ];
341
- }
342
- mat2d.fromSkew = fromSkew;
343
- /**
344
- * Alias for {@link fromSkew}
345
- * @category Shorthands
346
- */
347
- mat2d.skewing = fromSkew;
348
- /**
349
- * Computes a fixed point of the given matrix.
350
- * @param m The matrix to compute a fixed point of
351
- * @returns The fixed point of the given matrix, or null if the matrix is not invertible
352
- */
353
- function fixedPoint(m) {
354
- const [a, b, c, d, tx, ty] = m;
355
- // Computes (I - A)
356
- const iMinusA = [1 - a, -c, -b, 1 - d];
357
- // Computes an inverse matrix
358
- const iMinusAInv = mat2_1.mat2.invert(iMinusA);
359
- if (!iMinusAInv) {
360
- return null;
361
- }
362
- // Computes a fixed point
363
- const x = iMinusAInv[0] * tx + iMinusAInv[1] * ty;
364
- const y = iMinusAInv[2] * tx + iMinusAInv[3] * ty;
365
- return [x, y];
366
- }
367
- mat2d.fixedPoint = fixedPoint;
368
- /**
369
- * Returns Frobenius norm of a mat2d
370
- */
371
- function frob(a) {
372
- return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], 1);
373
- }
374
- mat2d.frob = frob;
375
- /**
376
- * Adds given mat2d's
377
- */
378
- function add(...ms) {
379
- const ret = [0, 0, 0, 0, 0, 0];
380
- for (const m of ms) {
381
- ret[0] += m[0];
382
- ret[1] += m[1];
383
- ret[2] += m[2];
384
- ret[3] += m[3];
385
- ret[4] += m[4];
386
- ret[5] += m[5];
387
- }
388
- return ret;
389
- }
390
- mat2d.add = add;
391
- /**
392
- * Subtracts matrix b from matrix a
393
- *
394
- * @shorthands
395
- * - {@link sub}
396
- */
397
- function subtract(...ms) {
398
- if (ms.length === 0) {
399
- return mat2d.zero;
400
- }
401
- else if (ms.length === 1) {
402
- return [-ms[0], -ms[1], -ms[2], -ms[3], -ms[4], -ms[5]];
403
- }
404
- else if (ms.length > 2) {
405
- const [a, b, ...rest] = ms;
406
- return subtract(subtract(a, b), ...rest);
407
- }
408
- const [a, b] = ms;
409
- return [
410
- a[0] - b[0],
411
- a[1] - b[1],
412
- a[2] - b[2],
413
- a[3] - b[3],
414
- a[4] - b[4],
415
- a[5] - b[5],
416
- ];
417
- }
418
- mat2d.subtract = subtract;
419
- /**
420
- * Alias for {@link subtract}
421
- * @category Shorthands
422
- */
423
- mat2d.sub = subtract;
424
- /**
425
- * Subtracts b from a
426
- */
427
- function delta(a, b) {
428
- return [
429
- b[0] - a[0],
430
- b[1] - a[1],
431
- b[2] - a[2],
432
- b[3] - a[3],
433
- b[4] - a[4],
434
- b[5] - a[5],
435
- ];
436
- }
437
- mat2d.delta = delta;
438
- /**
439
- * Multiply each element of the matrix by a scalar.
440
- */
441
- function multiplyScalar(a, s) {
442
- // prettier-ignore
443
- return [
444
- a[0] * s, a[1] * s,
445
- a[2] * s, a[3] * s,
446
- a[4] * s, a[5] * s,
447
- ];
448
- }
449
- mat2d.multiplyScalar = multiplyScalar;
450
- /**
451
- Adds given mat2d's after multiplying each element of the second operand by a scalar value.
452
- */
453
- function multiplyScalarAndAdd(a, b, scale) {
454
- return [
455
- a[0] + b[0] * scale,
456
- a[1] + b[1] * scale,
457
- a[2] + b[2] * scale,
458
- a[3] + b[3] * scale,
459
- a[4] + b[4] * scale,
460
- a[5] + b[5] * scale,
461
- ];
462
- }
463
- mat2d.multiplyScalarAndAdd = multiplyScalarAndAdd;
464
- /**
465
- * Constrain each element to lie between min and max
466
- * @see https://thebookofshaders.com/glossary/?search=clamp
467
- */
468
- function clamp(a, min, max) {
469
- return [
470
- Math.max(min, Math.min(max, a[0])),
471
- Math.max(min, Math.min(max, a[1])),
472
- Math.max(min, Math.min(max, a[2])),
473
- Math.max(min, Math.min(max, a[3])),
474
- Math.max(min, Math.min(max, a[4])),
475
- Math.max(min, Math.min(max, a[5])),
476
- ];
477
- }
478
- mat2d.clamp = clamp;
479
- /**
480
- * Clamps each element to [0, 1]
481
- */
482
- function clamp01(a) {
483
- return clamp(a, 0, 1);
484
- }
485
- mat2d.clamp01 = clamp01;
486
- /**
487
- * Clamps each element to [-1, 1]
488
- */
489
- function clamp11(a) {
490
- return clamp(a, -1, 1);
491
- }
492
- mat2d.clamp11 = clamp11;
493
- /**
494
- * Creates a matrix that maps from the given points to another. If the third point is not given, the orthogonal matrix is returned.
495
- * ```text
496
- * f-s f'-s'
497
- * |/ ---M--> |/
498
- * t t'
499
- * ```
500
- * @category Generators
501
- * @param first a pair of first point
502
- * @param second a pair of second point
503
- * @param third a pair of third point
504
- */
505
- function fromPoints(first, second, third) {
506
- if (!third) {
507
- // Computes third points by rotating second points 90 degrees
508
- const PI_HALF = Math.PI / 2;
509
- third = [
510
- vec2_1.vec2.add(first[0], vec2_1.vec2.rotate(vec2_1.vec2.sub(second[0], first[0]), PI_HALF)),
511
- vec2_1.vec2.add(first[1], vec2_1.vec2.rotate(vec2_1.vec2.sub(second[1], first[1]), PI_HALF)),
512
- ];
513
- }
514
- // Creates an affine matrix whose origin is first,
515
- // [1, 0] is second, and [1, 0] is third.
516
- // Then computes M = M_dst * M_src^-1
517
- const src = [
518
- second[0][0] - first[0][0],
519
- second[0][1] - first[0][1],
520
- third[0][0] - first[0][0],
521
- third[0][1] - first[0][1],
522
- first[0][0],
523
- first[0][1],
524
- ];
525
- const srcInv = invert(src);
526
- if (!srcInv) {
527
- return null;
528
- }
529
- const dst = [
530
- second[1][0] - first[1][0],
531
- second[1][1] - first[1][1],
532
- third[1][0] - first[1][0],
533
- third[1][1] - first[1][1],
534
- first[1][0],
535
- first[1][1],
536
- ];
537
- return multiply(dst, srcInv);
538
- }
539
- mat2d.fromPoints = fromPoints;
540
- /**
541
- * Creates a matrix from given translation, rotation, and scaling. The order of the transformations is translation, rotation, and scaling, like most of the graphics software.
542
- * @param t Translation vector
543
- * @param r Rotation angle in degrees
544
- * @param s Scaling vector or a number
545
- * @returns The matrix that represents the transformation
546
- *
547
- * @shorthands
548
- * - {@link trs}
549
- */
550
- function fromTRS(t = null, r = null, s = null) {
551
- t ??= vec2_1.vec2.zero;
552
- r ??= 0;
553
- if (s === null) {
554
- s = vec2_1.vec2.one;
555
- }
556
- else if (typeof s === 'number') {
557
- s = [s, s];
558
- }
559
- const C = Math.cos(r * Common.DEG2RAD);
560
- const S = Math.sin(r * Common.DEG2RAD);
561
- return [s[0] * C, s[0] * S, s[1] * -S, s[1] * C, ...t];
562
- }
563
- mat2d.fromTRS = fromTRS;
564
- /**
565
- * Alias for {@link fromTRS}
566
- * @category Shorthands
567
- */
568
- mat2d.trs = fromTRS;
569
- /**
570
- * Copies a the values from {@link mat2}, assuming the translation component is `[0, 0]`
571
- * @param m The matrix to convert
572
- * @returns The newly created matrix
573
- * @category Generators
574
- */
575
- function fromMat2(m) {
576
- return [...m, 0, 0];
577
- }
578
- mat2d.fromMat2 = fromMat2;
579
- /**
580
- * Returns whether or not the matrices have exactly the same elements in the same position (when compared with `===`)
581
- *
582
- * @shorthands
583
- * - {@link eq}
584
- */
585
- function exactEquals(a, b) {
586
- return (a[0] === b[0] &&
587
- a[1] === b[1] &&
588
- a[2] === b[2] &&
589
- a[3] === b[3] &&
590
- a[4] === b[4] &&
591
- a[5] === b[5]);
592
- }
593
- mat2d.exactEquals = exactEquals;
594
- /**
595
- * Alias for {@link exactEquals}
596
- * @category Shorthands
597
- */
598
- mat2d.eq = exactEquals;
599
- /**
600
- * Returns whether or not the matrices have approximately the same elements in the same position.
601
- *
602
- * @shorthands
603
- * - {@link approx}
604
- * - {@link equals}
605
- */
606
- function approxEquals(a, b) {
607
- const [a0, a1, a2, a3, a4, a5] = a;
608
- const [b0, b1, b2, b3, b4, b5] = b;
609
- return (Math.abs(a0 - b0) <=
610
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
611
- Math.abs(a1 - b1) <=
612
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
613
- Math.abs(a2 - b2) <=
614
- Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
615
- Math.abs(a3 - b3) <=
616
- Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
617
- Math.abs(a4 - b4) <=
618
- Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
619
- Math.abs(a5 - b5) <=
620
- Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)));
621
- }
622
- mat2d.approxEquals = approxEquals;
623
- /**
624
- * Alias for {@link approxEquals}
625
- * @category Shorthands
626
- */
627
- mat2d.approx = approxEquals;
628
- /**
629
- * Alias for {@link approxEquals}. This is provided for compatibility with gl-matrix.
630
- * @category Shorthands
631
- * @deprecated Use {@link approxEquals} instead
632
- */
633
- mat2d.equals = approxEquals;
634
- /**
635
- * Returns a string representation of a mat2d
636
- * @param m matrix to represent as a string
637
- * @param fractionDigits number of digits to appear after the decimal point
638
- */
639
- mat2d.toString = Common.createMatToStringFunction(2, 3);
640
- })(mat2d || (exports.mat2d = mat2d = {}));
641
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0MmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWF0MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQWtDO0FBQ2xDLGlDQUEyQjtBQUMzQixpQ0FBMkI7QUE2QjNCOzs7O0dBSUc7QUFDSCxJQUFpQixLQUFLLENBMHFCckI7QUExcUJELFdBQWlCLEtBQUs7SUFZckI7OztPQUdHO0lBQ0gsa0JBQWtCO0lBQ2xCLFNBQWdCLEVBQUUsQ0FDakIsQ0FBUyxFQUFHLENBQVMsRUFDckIsQ0FBUyxFQUFHLENBQVMsRUFDckIsRUFBVSxFQUFFLEVBQVU7UUFFdEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQU5lLFFBQUUsS0FNakIsQ0FBQTtJQUVEOzs7T0FHRztJQUNILFNBQWdCLEtBQUssQ0FBQyxDQUFRO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2QsQ0FBQztJQUZlLFdBQUssUUFFcEIsQ0FBQTtJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGtCQUFrQjtJQUNMLGNBQVEsR0FBVSxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVDLENBQUMsRUFBRSxDQUFDO1FBQ0osQ0FBQyxFQUFFLENBQUM7UUFDSixDQUFDLEVBQUUsQ0FBQztLQUNKLENBQUMsQ0FBQTtJQUVGOzs7T0FHRztJQUNVLE9BQUMsR0FBRyxNQUFBLFFBQVEsQ0FBQTtJQUV6Qjs7O09BR0c7SUFDVSxRQUFFLEdBQUcsTUFBQSxRQUFRLENBQUE7SUFFMUI7OztPQUdHO0lBQ1UsV0FBSyxHQUFHLE1BQUEsUUFBUSxDQUFBO0lBRTdCOzs7T0FHRztJQUNVLFVBQUksR0FBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFB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QUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDekQsQ0FBQTtJQUNGLENBQUM7SUFqQmUsa0JBQVksZUFpQjNCLENBQUE7SUFFRDs7O09BR0c7SUFDVSxZQUFNLEdBQUcsWUFBWSxDQUFBO0lBRWxDOzs7O09BSUc7SUFDVSxZQUFNLEdBQUcsWUFBWSxDQUFBO0lBRWxDOzs7O09BSUc7SUFDVSxjQUFRLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBRSxDQUFDLENBR2xELENBQUE7QUFDWixDQUFDLEVBMXFCZ0IsS0FBSyxxQkFBTCxLQUFLLFFBMHFCckIifQ==