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.
- package/lib/esm/mat2.d.ts +1 -1
- package/lib/esm/mat2.d.ts.map +1 -1
- package/lib/esm/mat2.js +3 -2
- package/lib/esm/mat2d.d.ts.map +1 -1
- package/lib/esm/mat2d.js +4 -5
- package/lib/esm/mat3.d.ts.map +1 -1
- package/lib/esm/mat3.js +16 -15
- package/lib/esm/mat4.d.ts.map +1 -1
- package/lib/esm/mat4.js +18 -17
- package/lib/esm/quat.js +3 -3
- package/lib/esm/scalar.d.ts +6 -35
- package/lib/esm/scalar.d.ts.map +1 -1
- package/lib/esm/scalar.js +11 -53
- package/package.json +9 -4
- package/lib/cjs/common.d.ts +0 -16
- package/lib/cjs/common.d.ts.map +0 -1
- package/lib/cjs/common.js +0 -70
- package/lib/cjs/index.d.ts +0 -10
- package/lib/cjs/index.d.ts.map +0 -1
- package/lib/cjs/index.js +0 -22
- package/lib/cjs/mat2.d.ts +0 -272
- package/lib/cjs/mat2.d.ts.map +0 -1
- package/lib/cjs/mat2.js +0 -473
- package/lib/cjs/mat2d.d.ts +0 -329
- package/lib/cjs/mat2d.d.ts.map +0 -1
- package/lib/cjs/mat2d.js +0 -641
- package/lib/cjs/mat3.d.ts +0 -295
- package/lib/cjs/mat3.d.ts.map +0 -1
- package/lib/cjs/mat3.js +0 -670
- package/lib/cjs/mat4.d.ts +0 -532
- package/lib/cjs/mat4.d.ts.map +0 -1
- package/lib/cjs/mat4.js +0 -1576
- package/lib/cjs/quat.d.ts +0 -334
- package/lib/cjs/quat.d.ts.map +0 -1
- package/lib/cjs/quat.js +0 -802
- package/lib/cjs/scalar.d.ts +0 -501
- package/lib/cjs/scalar.d.ts.map +0 -1
- package/lib/cjs/scalar.js +0 -728
- package/lib/cjs/vec2.d.ts +0 -664
- package/lib/cjs/vec2.d.ts.map +0 -1
- package/lib/cjs/vec2.js +0 -1247
- package/lib/cjs/vec3.d.ts +0 -660
- package/lib/cjs/vec3.d.ts.map +0 -1
- package/lib/cjs/vec3.js +0 -1329
- package/lib/cjs/vec4.d.ts +0 -552
- package/lib/cjs/vec4.d.ts.map +0 -1
- 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==
|