linearly 0.36.1 → 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.
package/lib/cjs/mat2.js DELETED
@@ -1,474 +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.mat2 = void 0;
37
- const Common = __importStar(require("./common"));
38
- const vec2_1 = require("./vec2");
39
- /**
40
- * Functions for {@link mat2}, 2D transformation matrix excluding translation.
41
- * @category Modules
42
- */
43
- var mat2;
44
- (function (mat2) {
45
- /**
46
- * Creates a new matrix from given elements
47
- * @category Generators
48
- */
49
- function of(m00, m01, m10, m11) {
50
- return [m00, m01, m10, m11];
51
- }
52
- mat2.of = of;
53
- /**
54
- * Creates a mutable clone of given mat2
55
- * @category Generators
56
- */
57
- function clone(a) {
58
- return [...a];
59
- }
60
- mat2.clone = clone;
61
- /**
62
- * The identity matrix of mat2.
63
- * ```ts
64
- * [1, 0,
65
- * 0, 1]
66
- * ```
67
- * @category Constants
68
- *
69
- * @shorthands
70
- * - {@link id}
71
- * - {@link ident}
72
- */
73
- mat2.identity = Object.freeze([1, 0, 0, 1]);
74
- /**
75
- * Alias for {@link identity}
76
- * @category Shorthands
77
- */
78
- mat2.I = mat2.identity;
79
- /**
80
- * Alias for {@link identity}
81
- * @category Shorthands
82
- */
83
- mat2.id = mat2.identity;
84
- /**
85
- * Alias for {@link identity}
86
- * @category Shorthands
87
- */
88
- mat2.ident = mat2.identity;
89
- /**
90
- * The mat2 filled with zeros.
91
- * @category Constants
92
- */
93
- mat2.zero = Object.freeze([0, 0, 0, 0]);
94
- /**
95
- * Transpose the values of a mat2
96
- */
97
- function transpose(a) {
98
- // prettier-ignore
99
- return [
100
- a[0], a[2],
101
- a[1], a[3],
102
- ];
103
- }
104
- mat2.transpose = transpose;
105
- /**
106
- * Inverts a mat2
107
- *
108
- * @shorthands
109
- * - {@link inv}
110
- */
111
- function invert(a) {
112
- const [a0, a1, a2, a3] = a;
113
- // Calculate the determinant
114
- const det = a0 * a3 - a2 * a1;
115
- if (!det) {
116
- return null;
117
- }
118
- const detinv = 1 / det;
119
- // prettier-ignore
120
- return [
121
- a3 * detinv, -a1 * detinv,
122
- -a2 * detinv, a0 * detinv
123
- ];
124
- }
125
- mat2.invert = invert;
126
- /**
127
- * Alias for {@link invert}
128
- */
129
- mat2.inv = invert;
130
- /**
131
- * Calculates the adjugate of a mat2
132
- */
133
- function adjoint(a) {
134
- // Caching this value is necessary if out == a
135
- const a0 = a[0];
136
- return [a[3], -a[1], -a[2], a0];
137
- }
138
- mat2.adjoint = adjoint;
139
- /**
140
- * Calculates the determinant of a mat2
141
- * @returns determinant of a
142
- *
143
- * @shorthands
144
- * - {@link det}
145
- */
146
- function determinant(a) {
147
- return a[0] * a[3] - a[2] * a[1];
148
- }
149
- mat2.determinant = determinant;
150
- /**
151
- * Alias for {@link determinant}
152
- * @category Shorthands
153
- */
154
- mat2.det = determinant;
155
- /**
156
- * Multiplies given mat2's
157
- *
158
- * @shorthands
159
- * - {@link mul}
160
- */
161
- function multiply(...ms) {
162
- if (ms.length === 0) {
163
- return mat2.identity;
164
- }
165
- else if (ms.length === 1) {
166
- return ms[0];
167
- }
168
- else if (ms.length > 2) {
169
- const [a, b, ...rest] = ms;
170
- return multiply(multiply(a, b), ...rest);
171
- }
172
- const [a0, a1, a2, a3] = ms[0];
173
- const [b0, b1, b2, b3] = ms[1];
174
- return [
175
- a0 * b0 + a2 * b1,
176
- a1 * b0 + a3 * b1,
177
- a0 * b2 + a2 * b3,
178
- a1 * b2 + a3 * b3,
179
- ];
180
- }
181
- mat2.multiply = multiply;
182
- /**
183
- * Alias for {@link multiply}
184
- * @category Shorthands
185
- */
186
- mat2.mul = multiply;
187
- /**
188
- * Rotates a mat2 by the given angle
189
- *
190
- * @param a the matrix to rotate
191
- * @param deg the angle to rotate the matrix by, in degrees
192
- */
193
- function rotate(a, deg) {
194
- const [a0, a1, a2, a3] = a;
195
- const s = Math.sin(deg * Common.DEG2RAD);
196
- const c = Math.cos(deg * Common.DEG2RAD);
197
- return [
198
- a0 * c + a2 * s,
199
- a1 * c + a3 * s,
200
- a0 * -s + a2 * c,
201
- a1 * -s + a3 * c,
202
- ];
203
- }
204
- mat2.rotate = rotate;
205
- /**
206
- * Scales the mat2 by the dimensions in the given vec2
207
- **/
208
- function scale(a, b) {
209
- const [a0, a1, a2, a3] = a;
210
- const [v0, v1] = typeof b === 'number' ? [b, b] : b;
211
- return [a0 * v0, a1 * v0, a2 * v1, a3 * v1];
212
- }
213
- mat2.scale = scale;
214
- /**
215
- * Apply skew to the mat2d by the given angles
216
- * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew
217
- * @param m the matrix to skew
218
- * @param deg the angles to skew the matrix by, in degrees
219
- */
220
- function skew(m, deg) {
221
- return multiply(m, fromSkew(deg));
222
- }
223
- mat2.skew = skew;
224
- /**
225
- * Creates a matrix from a given angle.
226
- * @param deg The angle to rotate the matrix by, in degrees
227
- * @category Generators
228
- *
229
- * @shorthands
230
- * - {@link rotation}
231
- */
232
- function fromRotation(deg) {
233
- const s = Math.sin(deg * Common.DEG2RAD);
234
- const c = Math.cos(deg * Common.DEG2RAD);
235
- return [c, s, -s, c];
236
- }
237
- mat2.fromRotation = fromRotation;
238
- /**
239
- * Alias for {@link fromRotation}
240
- * @category Shorthands
241
- */
242
- mat2.rotation = fromRotation;
243
- /**
244
- * Creates a matrix from a vector scaling
245
- * @category Generators
246
- *
247
- * @shorthands
248
- * - {@link scaling}
249
- *
250
- */
251
- function fromScaling(v) {
252
- return [v[0], 0, 0, v[1]];
253
- }
254
- mat2.fromScaling = fromScaling;
255
- /**
256
- * Alias for {@link fromScaling}
257
- * @category Shorthands
258
- */
259
- mat2.scaling = fromScaling;
260
- /**
261
- * Creates a matrix from a vector skew
262
- * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew
263
- * @category Generators
264
- *
265
- * @shorthands
266
- * - {@link skewing}
267
- */
268
- function fromSkew(deg) {
269
- const x = Math.tan(deg[0] * Common.DEG2RAD);
270
- const y = Math.tan(deg[1] * Common.DEG2RAD);
271
- // prettier-ignore
272
- return [
273
- 1, y,
274
- x, 1,
275
- ];
276
- }
277
- mat2.fromSkew = fromSkew;
278
- /**
279
- * Alias for {@link fromSkew}
280
- * @category Shorthands
281
- */
282
- mat2.skewing = fromSkew;
283
- /**
284
- * Creates a matrix from given rotation, and scaling. The order of the transformations is rotation, and scaling.
285
- * @param r Rotation angle in degrees
286
- * @param s Scaling vector
287
- * @returns The matrix that represents the transformation
288
- */
289
- function fromRotScale(r = null, s = null) {
290
- r ??= 0;
291
- s ??= vec2_1.vec2.one;
292
- const C = Math.cos(r * Common.DEG2RAD);
293
- const S = Math.sin(r * Common.DEG2RAD);
294
- return [s[0] * C, s[0] * S, s[1] * -S, s[1] * C];
295
- }
296
- mat2.fromRotScale = fromRotScale;
297
- /**
298
- * Alias for {@link fromRotScale}
299
- * @category Shorthands
300
- */
301
- mat2.rs = fromRotScale;
302
- /**
303
- * Returns Frobenius norm of a mat2
304
- */
305
- function frob(a) {
306
- return Math.hypot(a[0], a[1], a[2], a[3]);
307
- }
308
- mat2.frob = frob;
309
- /**
310
- * Adds given mat2's
311
- */
312
- function add(...ms) {
313
- if (ms.length === 0) {
314
- return mat2.zero;
315
- }
316
- else if (ms.length === 1) {
317
- return ms[0];
318
- }
319
- else if (ms.length > 2) {
320
- const [a, b, ...rest] = ms;
321
- return add(add(a, b), ...rest);
322
- }
323
- const [a, b] = ms;
324
- return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]];
325
- }
326
- mat2.add = add;
327
- /**
328
- * Subtracts matrix b from matrix a
329
- *
330
- * @shorthands
331
- * - {@link sub}
332
- */
333
- function subtract(...ms) {
334
- if (ms.length === 0) {
335
- return mat2.zero;
336
- }
337
- else if (ms.length === 1) {
338
- const m = ms[0];
339
- return [-m[0], -m[1], -m[2], -m[3]];
340
- }
341
- else if (ms.length > 2) {
342
- const [a, b, ...rest] = ms;
343
- return subtract(subtract(a, b), ...rest);
344
- }
345
- const [a, b] = ms;
346
- return [a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]];
347
- }
348
- mat2.subtract = subtract;
349
- /**
350
- * Alias for {@link subtract}
351
- * @category Shorthands
352
- */
353
- mat2.sub = subtract;
354
- /**
355
- * Subtracts b from a
356
- */
357
- function delta(a, b) {
358
- return [b[0] - a[0], b[1] - a[1], b[2] - a[2], b[3] - a[3]];
359
- }
360
- mat2.delta = delta;
361
- /**
362
- * Copies the values from a {@link mat2d}, omitting the translation components
363
- * @param m The matrix to copy from
364
- * @returns A newly created matrix
365
- * @category Generators
366
- */
367
- function fromMat2d(m) {
368
- return [m[0], m[1], m[2], m[3]];
369
- }
370
- mat2.fromMat2d = fromMat2d;
371
- /**
372
- * Multiplies each element of a mat2 by a scalar
373
- */
374
- function multiplyScalar(a, s) {
375
- // prettier-ignore
376
- return [
377
- a[0] * s, a[1] * s,
378
- a[2] * s, a[3] * s,
379
- ];
380
- }
381
- mat2.multiplyScalar = multiplyScalar;
382
- /**
383
- * Adds given mat2's after multiplying each element of the second operand by a scalar value.
384
- */
385
- function multiplyScalarAndAdd(a, b, scale) {
386
- return [
387
- a[0] + b[0] * scale,
388
- a[1] + b[1] * scale,
389
- a[2] + b[2] * scale,
390
- a[3] + b[3] * scale,
391
- ];
392
- }
393
- mat2.multiplyScalarAndAdd = multiplyScalarAndAdd;
394
- /**
395
- * Constrain each element to lie between min and max
396
- * @see https://thebookofshaders.com/glossary/?search=clamp
397
- */
398
- function clamp(a, min, max) {
399
- return [
400
- Math.max(min, Math.min(max, a[0])),
401
- Math.max(min, Math.min(max, a[1])),
402
- Math.max(min, Math.min(max, a[2])),
403
- Math.max(min, Math.min(max, a[3])),
404
- ];
405
- }
406
- mat2.clamp = clamp;
407
- /**
408
- * Clamps each element to [0, 1]
409
- */
410
- function clamp01(a) {
411
- return clamp(a, 0, 1);
412
- }
413
- mat2.clamp01 = clamp01;
414
- /**
415
- * Clamps each element to [-1, 1]
416
- */
417
- function clamp11(a) {
418
- return clamp(a, -1, 1);
419
- }
420
- mat2.clamp11 = clamp11;
421
- /**
422
- * Returns whether or not the matrices have exactly the same elements in the same position (when compared with `===`)
423
- *
424
- * @shorthands
425
- * - {@link eq}
426
- */
427
- function exactEquals(a, b) {
428
- return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
429
- }
430
- mat2.exactEquals = exactEquals;
431
- /**
432
- * Alias for {@link exactEquals}
433
- * @category Shorthands
434
- */
435
- mat2.eq = exactEquals;
436
- /**
437
- * Returns whether or not the matrices have approximately the same elements in the same position.
438
- *
439
- * @shorthands
440
- * - {@link approx}
441
- * - {@link equals}
442
- */
443
- function approxEquals(a, b) {
444
- const [a0, a1, a2, a3] = a;
445
- const [b0, b1, b2, b3] = b;
446
- return (Math.abs(a0 - b0) <=
447
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
448
- Math.abs(a1 - b1) <=
449
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
450
- Math.abs(a2 - b2) <=
451
- Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
452
- Math.abs(a3 - b3) <=
453
- Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)));
454
- }
455
- mat2.approxEquals = approxEquals;
456
- /**
457
- * Alias for {@link approxEquals}
458
- * @category Shorthands
459
- */
460
- mat2.approx = approxEquals;
461
- /**
462
- * Alias for {@link approxEquals}. This is provided for compatibility with gl-matrix.
463
- * @category Shorthands
464
- * @deprecated Use {@link approxEquals} instead
465
- */
466
- mat2.equals = approxEquals;
467
- /**
468
- * Returns a string representation of a mat2
469
- * @param m matrix to represent as a string
470
- * @param fractionDigits number of digits to appear after the decimal point
471
- */
472
- mat2.toString = Common.createMatToStringFunction(2, 2);
473
- })(mat2 || (exports.mat2 = mat2 = {}));
474
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXQyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFrQztBQUVsQyxpQ0FBMkI7QUFhM0I7OztHQUdHO0FBQ0gsSUFBaUIsSUFBSSxDQXVkcEI7QUF2ZEQsV0FBaUIsSUFBSTtJQU9wQjs7O09BR0c7SUFDSCxTQUFnQixFQUFFLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsR0FBVztRQUNwRSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUZlLE9BQUUsS0FFakIsQ0FBQTtJQUVEOzs7T0FHRztJQUNILFNBQWdCLEtBQUssQ0FBQyxDQUFPO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2QsQ0FBQztJQUZlLFVBQUssUUFFcEIsQ0FBQTtJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ1UsYUFBUSxHQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXpEOzs7T0FHRztJQUNVLE1BQUMsR0FBRyxLQUFBLFFBQVEsQ0FBQTtJQUV6Qjs7O09BR0c7SUFDVSxPQUFFLEdBQUcsS0FBQSxRQUFRLENBQUE7SUFFMUI7OztPQUdHO0lBQ1UsVUFBSyxHQUFHLEtBQUEsUUFBUSxDQUFBO0lBRTdCOzs7T0FHRztJQUNVLFNBQUksR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVyRDs7T0FFRztJQUNILFNBQWdCLFNBQVMsQ0FBQyxDQUFPO1FBQ2hDLGtCQUFrQjtRQUNsQixPQUFPO1lBQ04sQ0FBQyxDQUFD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