@holoscript/std 2.1.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/dist/math.js ADDED
@@ -0,0 +1,539 @@
1
+ /**
2
+ * Math utilities for HoloScript
3
+ *
4
+ * Vector math, quaternion operations, interpolation, and noise functions.
5
+ */
6
+ import { vec3, quat } from './types.js';
7
+ // =============================================================================
8
+ // CONSTANTS
9
+ // =============================================================================
10
+ export const PI = Math.PI;
11
+ export const TAU = Math.PI * 2;
12
+ export const HALF_PI = Math.PI / 2;
13
+ export const DEG_TO_RAD = Math.PI / 180;
14
+ export const RAD_TO_DEG = 180 / Math.PI;
15
+ export const EPSILON = 1e-6;
16
+ // =============================================================================
17
+ // BASIC MATH
18
+ // =============================================================================
19
+ export function clamp(value, min, max) {
20
+ return Math.max(min, Math.min(max, value));
21
+ }
22
+ export function lerp(a, b, t) {
23
+ return a + (b - a) * t;
24
+ }
25
+ export function inverseLerp(a, b, value) {
26
+ return (value - a) / (b - a);
27
+ }
28
+ export function remap(value, inMin, inMax, outMin, outMax) {
29
+ return lerp(outMin, outMax, inverseLerp(inMin, inMax, value));
30
+ }
31
+ export function smoothstep(edge0, edge1, x) {
32
+ const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);
33
+ return t * t * (3 - 2 * t);
34
+ }
35
+ export function smootherstep(edge0, edge1, x) {
36
+ const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);
37
+ return t * t * t * (t * (t * 6 - 15) + 10);
38
+ }
39
+ export function degToRad(degrees) {
40
+ return degrees * DEG_TO_RAD;
41
+ }
42
+ export function radToDeg(radians) {
43
+ return radians * RAD_TO_DEG;
44
+ }
45
+ export function mod(n, m) {
46
+ return ((n % m) + m) % m;
47
+ }
48
+ export function fract(x) {
49
+ return x - Math.floor(x);
50
+ }
51
+ export function sign(x) {
52
+ return x > 0 ? 1 : x < 0 ? -1 : 0;
53
+ }
54
+ export function step(edge, x) {
55
+ return x < edge ? 0 : 1;
56
+ }
57
+ // =============================================================================
58
+ // VEC2 OPERATIONS
59
+ // =============================================================================
60
+ export const vec2Math = {
61
+ add: (a, b) => ({ x: a.x + b.x, y: a.y + b.y }),
62
+ sub: (a, b) => ({ x: a.x - b.x, y: a.y - b.y }),
63
+ mul: (a, s) => ({ x: a.x * s, y: a.y * s }),
64
+ div: (a, s) => ({ x: a.x / s, y: a.y / s }),
65
+ dot: (a, b) => a.x * b.x + a.y * b.y,
66
+ length: (v) => Math.sqrt(v.x * v.x + v.y * v.y),
67
+ lengthSq: (v) => v.x * v.x + v.y * v.y,
68
+ normalize: (v) => {
69
+ const len = vec2Math.length(v);
70
+ return len > 0 ? vec2Math.div(v, len) : { x: 0, y: 0 };
71
+ },
72
+ distance: (a, b) => vec2Math.length(vec2Math.sub(a, b)),
73
+ lerp: (a, b, t) => ({
74
+ x: lerp(a.x, b.x, t),
75
+ y: lerp(a.y, b.y, t),
76
+ }),
77
+ rotate: (v, angle) => {
78
+ const c = Math.cos(angle);
79
+ const s = Math.sin(angle);
80
+ return { x: v.x * c - v.y * s, y: v.x * s + v.y * c };
81
+ },
82
+ angle: (v) => Math.atan2(v.y, v.x),
83
+ angleBetween: (a, b) => {
84
+ return Math.acos(clamp(vec2Math.dot(vec2Math.normalize(a), vec2Math.normalize(b)), -1, 1));
85
+ },
86
+ };
87
+ // =============================================================================
88
+ // VEC3 OPERATIONS
89
+ // =============================================================================
90
+ export const vec3Math = {
91
+ zero: () => vec3(0, 0, 0),
92
+ one: () => vec3(1, 1, 1),
93
+ up: () => vec3(0, 1, 0),
94
+ down: () => vec3(0, -1, 0),
95
+ forward: () => vec3(0, 0, -1),
96
+ back: () => vec3(0, 0, 1),
97
+ left: () => vec3(-1, 0, 0),
98
+ right: () => vec3(1, 0, 0),
99
+ add: (a, b) => ({ x: a.x + b.x, y: a.y + b.y, z: a.z + b.z }),
100
+ sub: (a, b) => ({ x: a.x - b.x, y: a.y - b.y, z: a.z - b.z }),
101
+ mul: (a, s) => ({ x: a.x * s, y: a.y * s, z: a.z * s }),
102
+ div: (a, s) => ({ x: a.x / s, y: a.y / s, z: a.z / s }),
103
+ mulVec: (a, b) => ({ x: a.x * b.x, y: a.y * b.y, z: a.z * b.z }),
104
+ dot: (a, b) => a.x * b.x + a.y * b.y + a.z * b.z,
105
+ cross: (a, b) => ({
106
+ x: a.y * b.z - a.z * b.y,
107
+ y: a.z * b.x - a.x * b.z,
108
+ z: a.x * b.y - a.y * b.x,
109
+ }),
110
+ length: (v) => Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z),
111
+ lengthSq: (v) => v.x * v.x + v.y * v.y + v.z * v.z,
112
+ normalize: (v) => {
113
+ const len = vec3Math.length(v);
114
+ return len > EPSILON ? vec3Math.div(v, len) : vec3(0, 0, 0);
115
+ },
116
+ distance: (a, b) => vec3Math.length(vec3Math.sub(a, b)),
117
+ distanceSq: (a, b) => vec3Math.lengthSq(vec3Math.sub(a, b)),
118
+ lerp: (a, b, t) => ({
119
+ x: lerp(a.x, b.x, t),
120
+ y: lerp(a.y, b.y, t),
121
+ z: lerp(a.z, b.z, t),
122
+ }),
123
+ slerp: (a, b, t) => {
124
+ const dot = clamp(vec3Math.dot(a, b), -1, 1);
125
+ const theta = Math.acos(dot) * t;
126
+ const relative = vec3Math.normalize(vec3Math.sub(b, vec3Math.mul(a, dot)));
127
+ return vec3Math.add(vec3Math.mul(a, Math.cos(theta)), vec3Math.mul(relative, Math.sin(theta)));
128
+ },
129
+ negate: (v) => ({ x: -v.x, y: -v.y, z: -v.z }),
130
+ abs: (v) => ({ x: Math.abs(v.x), y: Math.abs(v.y), z: Math.abs(v.z) }),
131
+ min: (a, b) => ({
132
+ x: Math.min(a.x, b.x),
133
+ y: Math.min(a.y, b.y),
134
+ z: Math.min(a.z, b.z),
135
+ }),
136
+ max: (a, b) => ({
137
+ x: Math.max(a.x, b.x),
138
+ y: Math.max(a.y, b.y),
139
+ z: Math.max(a.z, b.z),
140
+ }),
141
+ clamp: (v, min, max) => ({
142
+ x: clamp(v.x, min.x, max.x),
143
+ y: clamp(v.y, min.y, max.y),
144
+ z: clamp(v.z, min.z, max.z),
145
+ }),
146
+ floor: (v) => ({
147
+ x: Math.floor(v.x),
148
+ y: Math.floor(v.y),
149
+ z: Math.floor(v.z),
150
+ }),
151
+ ceil: (v) => ({
152
+ x: Math.ceil(v.x),
153
+ y: Math.ceil(v.y),
154
+ z: Math.ceil(v.z),
155
+ }),
156
+ round: (v) => ({
157
+ x: Math.round(v.x),
158
+ y: Math.round(v.y),
159
+ z: Math.round(v.z),
160
+ }),
161
+ reflect: (v, normal) => {
162
+ const dot = vec3Math.dot(v, normal);
163
+ return vec3Math.sub(v, vec3Math.mul(normal, 2 * dot));
164
+ },
165
+ project: (v, onto) => {
166
+ const dot = vec3Math.dot(v, onto);
167
+ const lenSq = vec3Math.lengthSq(onto);
168
+ return vec3Math.mul(onto, dot / lenSq);
169
+ },
170
+ angle: (a, b) => {
171
+ const dot = vec3Math.dot(vec3Math.normalize(a), vec3Math.normalize(b));
172
+ return Math.acos(clamp(dot, -1, 1));
173
+ },
174
+ equals: (a, b, epsilon = EPSILON) => {
175
+ return (Math.abs(a.x - b.x) < epsilon &&
176
+ Math.abs(a.y - b.y) < epsilon &&
177
+ Math.abs(a.z - b.z) < epsilon);
178
+ },
179
+ };
180
+ // =============================================================================
181
+ // QUATERNION OPERATIONS
182
+ // =============================================================================
183
+ export const quatMath = {
184
+ identity: () => quat(0, 0, 0, 1),
185
+ fromAxisAngle: (axis, angle) => {
186
+ const halfAngle = angle / 2;
187
+ const s = Math.sin(halfAngle);
188
+ const normalized = vec3Math.normalize(axis);
189
+ return {
190
+ x: normalized.x * s,
191
+ y: normalized.y * s,
192
+ z: normalized.z * s,
193
+ w: Math.cos(halfAngle),
194
+ };
195
+ },
196
+ fromEuler: (euler) => {
197
+ const { x, y, z } = euler;
198
+ const c1 = Math.cos(degToRad(x) / 2);
199
+ const c2 = Math.cos(degToRad(y) / 2);
200
+ const c3 = Math.cos(degToRad(z) / 2);
201
+ const s1 = Math.sin(degToRad(x) / 2);
202
+ const s2 = Math.sin(degToRad(y) / 2);
203
+ const s3 = Math.sin(degToRad(z) / 2);
204
+ return {
205
+ x: s1 * c2 * c3 + c1 * s2 * s3,
206
+ y: c1 * s2 * c3 - s1 * c2 * s3,
207
+ z: c1 * c2 * s3 + s1 * s2 * c3,
208
+ w: c1 * c2 * c3 - s1 * s2 * s3,
209
+ };
210
+ },
211
+ toEuler: (q) => {
212
+ const sinr_cosp = 2 * (q.w * q.x + q.y * q.z);
213
+ const cosr_cosp = 1 - 2 * (q.x * q.x + q.y * q.y);
214
+ const x = Math.atan2(sinr_cosp, cosr_cosp);
215
+ const sinp = 2 * (q.w * q.y - q.z * q.x);
216
+ let y;
217
+ if (Math.abs(sinp) >= 1) {
218
+ y = (Math.PI / 2) * Math.sign(sinp);
219
+ }
220
+ else {
221
+ y = Math.asin(sinp);
222
+ }
223
+ const siny_cosp = 2 * (q.w * q.z + q.x * q.y);
224
+ const cosy_cosp = 1 - 2 * (q.y * q.y + q.z * q.z);
225
+ const z = Math.atan2(siny_cosp, cosy_cosp);
226
+ return {
227
+ x: radToDeg(x),
228
+ y: radToDeg(y),
229
+ z: radToDeg(z),
230
+ };
231
+ },
232
+ multiply: (a, b) => ({
233
+ x: a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y,
234
+ y: a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x,
235
+ z: a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w,
236
+ w: a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z,
237
+ }),
238
+ conjugate: (q) => ({ x: -q.x, y: -q.y, z: -q.z, w: q.w }),
239
+ inverse: (q) => {
240
+ const lenSq = q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;
241
+ return {
242
+ x: -q.x / lenSq,
243
+ y: -q.y / lenSq,
244
+ z: -q.z / lenSq,
245
+ w: q.w / lenSq,
246
+ };
247
+ },
248
+ normalize: (q) => {
249
+ const len = Math.sqrt(q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w);
250
+ return { x: q.x / len, y: q.y / len, z: q.z / len, w: q.w / len };
251
+ },
252
+ dot: (a, b) => a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w,
253
+ slerp: (a, b, t) => {
254
+ let dot = quatMath.dot(a, b);
255
+ // If dot is negative, negate one quaternion to take shorter path
256
+ let bAdjusted = b;
257
+ if (dot < 0) {
258
+ bAdjusted = { x: -b.x, y: -b.y, z: -b.z, w: -b.w };
259
+ dot = -dot;
260
+ }
261
+ if (dot > 0.9995) {
262
+ // Linear interpolation for very close quaternions
263
+ return quatMath.normalize({
264
+ x: lerp(a.x, bAdjusted.x, t),
265
+ y: lerp(a.y, bAdjusted.y, t),
266
+ z: lerp(a.z, bAdjusted.z, t),
267
+ w: lerp(a.w, bAdjusted.w, t),
268
+ });
269
+ }
270
+ const theta0 = Math.acos(dot);
271
+ const theta = theta0 * t;
272
+ const sinTheta = Math.sin(theta);
273
+ const sinTheta0 = Math.sin(theta0);
274
+ const s0 = Math.cos(theta) - (dot * sinTheta) / sinTheta0;
275
+ const s1 = sinTheta / sinTheta0;
276
+ return {
277
+ x: a.x * s0 + bAdjusted.x * s1,
278
+ y: a.y * s0 + bAdjusted.y * s1,
279
+ z: a.z * s0 + bAdjusted.z * s1,
280
+ w: a.w * s0 + bAdjusted.w * s1,
281
+ };
282
+ },
283
+ rotateVec3: (q, v) => {
284
+ const qv = { x: q.x, y: q.y, z: q.z };
285
+ const uv = vec3Math.cross(qv, v);
286
+ const uuv = vec3Math.cross(qv, uv);
287
+ return vec3Math.add(v, vec3Math.add(vec3Math.mul(uv, 2 * q.w), vec3Math.mul(uuv, 2)));
288
+ },
289
+ lookAt: (forward, up = vec3(0, 1, 0)) => {
290
+ const f = vec3Math.normalize(forward);
291
+ const r = vec3Math.normalize(vec3Math.cross(up, f));
292
+ const u = vec3Math.cross(f, r);
293
+ const trace = r.x + u.y + f.z;
294
+ let q;
295
+ if (trace > 0) {
296
+ const s = 0.5 / Math.sqrt(trace + 1);
297
+ q = {
298
+ w: 0.25 / s,
299
+ x: (u.z - f.y) * s,
300
+ y: (f.x - r.z) * s,
301
+ z: (r.y - u.x) * s,
302
+ };
303
+ }
304
+ else if (r.x > u.y && r.x > f.z) {
305
+ const s = 2 * Math.sqrt(1 + r.x - u.y - f.z);
306
+ q = {
307
+ w: (u.z - f.y) / s,
308
+ x: 0.25 * s,
309
+ y: (u.x + r.y) / s,
310
+ z: (f.x + r.z) / s,
311
+ };
312
+ }
313
+ else if (u.y > f.z) {
314
+ const s = 2 * Math.sqrt(1 + u.y - r.x - f.z);
315
+ q = {
316
+ w: (f.x - r.z) / s,
317
+ x: (u.x + r.y) / s,
318
+ y: 0.25 * s,
319
+ z: (f.y + u.z) / s,
320
+ };
321
+ }
322
+ else {
323
+ const s = 2 * Math.sqrt(1 + f.z - r.x - u.y);
324
+ q = {
325
+ w: (r.y - u.x) / s,
326
+ x: (f.x + r.z) / s,
327
+ y: (f.y + u.z) / s,
328
+ z: 0.25 * s,
329
+ };
330
+ }
331
+ return quatMath.normalize(q);
332
+ },
333
+ };
334
+ // =============================================================================
335
+ // AABB OPERATIONS
336
+ // =============================================================================
337
+ export const aabbMath = {
338
+ contains: (aabb, point) => {
339
+ return (point.x >= aabb.min.x && point.x <= aabb.max.x &&
340
+ point.y >= aabb.min.y && point.y <= aabb.max.y &&
341
+ point.z >= aabb.min.z && point.z <= aabb.max.z);
342
+ },
343
+ intersects: (a, b) => {
344
+ return (a.min.x <= b.max.x && a.max.x >= b.min.x &&
345
+ a.min.y <= b.max.y && a.max.y >= b.min.y &&
346
+ a.min.z <= b.max.z && a.max.z >= b.min.z);
347
+ },
348
+ center: (aabb) => vec3Math.mul(vec3Math.add(aabb.min, aabb.max), 0.5),
349
+ size: (aabb) => vec3Math.sub(aabb.max, aabb.min),
350
+ expand: (aabb, point) => ({
351
+ min: vec3Math.min(aabb.min, point),
352
+ max: vec3Math.max(aabb.max, point),
353
+ }),
354
+ merge: (a, b) => ({
355
+ min: vec3Math.min(a.min, b.min),
356
+ max: vec3Math.max(a.max, b.max),
357
+ }),
358
+ };
359
+ // =============================================================================
360
+ // NOISE FUNCTIONS
361
+ // =============================================================================
362
+ // Simple permutation table for noise
363
+ const perm = new Uint8Array(512);
364
+ for (let i = 0; i < 256; i++)
365
+ perm[i] = perm[i + 256] = i;
366
+ for (let i = 255; i > 0; i--) {
367
+ const j = Math.floor(Math.random() * (i + 1));
368
+ [perm[i], perm[j]] = [perm[j], perm[i]];
369
+ perm[i + 256] = perm[i];
370
+ }
371
+ function fade(t) {
372
+ return t * t * t * (t * (t * 6 - 15) + 10);
373
+ }
374
+ function grad(hash, x, y, z) {
375
+ const h = hash & 15;
376
+ const u = h < 8 ? x : y;
377
+ const v = h < 4 ? y : h === 12 || h === 14 ? x : z;
378
+ return ((h & 1) === 0 ? u : -u) + ((h & 2) === 0 ? v : -v);
379
+ }
380
+ export const noise = {
381
+ /**
382
+ * 3D Perlin noise (-1 to 1)
383
+ */
384
+ perlin3d: (x, y, z) => {
385
+ const X = Math.floor(x) & 255;
386
+ const Y = Math.floor(y) & 255;
387
+ const Z = Math.floor(z) & 255;
388
+ x -= Math.floor(x);
389
+ y -= Math.floor(y);
390
+ z -= Math.floor(z);
391
+ const u = fade(x);
392
+ const v = fade(y);
393
+ const w = fade(z);
394
+ const A = perm[X] + Y;
395
+ const AA = perm[A] + Z;
396
+ const AB = perm[A + 1] + Z;
397
+ const B = perm[X + 1] + Y;
398
+ const BA = perm[B] + Z;
399
+ const BB = perm[B + 1] + Z;
400
+ return lerp(lerp(lerp(grad(perm[AA], x, y, z), grad(perm[BA], x - 1, y, z), u), lerp(grad(perm[AB], x, y - 1, z), grad(perm[BB], x - 1, y - 1, z), u), v), lerp(lerp(grad(perm[AA + 1], x, y, z - 1), grad(perm[BA + 1], x - 1, y, z - 1), u), lerp(grad(perm[AB + 1], x, y - 1, z - 1), grad(perm[BB + 1], x - 1, y - 1, z - 1), u), v), w);
401
+ },
402
+ /**
403
+ * 2D Perlin noise (-1 to 1)
404
+ */
405
+ perlin2d: (x, y) => {
406
+ return noise.perlin3d(x, y, 0);
407
+ },
408
+ /**
409
+ * Fractal Brownian Motion (fBm)
410
+ */
411
+ fbm: (x, y, z, octaves = 6, lacunarity = 2, gain = 0.5) => {
412
+ let value = 0;
413
+ let amplitude = 1;
414
+ let frequency = 1;
415
+ let maxValue = 0;
416
+ for (let i = 0; i < octaves; i++) {
417
+ value += amplitude * noise.perlin3d(x * frequency, y * frequency, z * frequency);
418
+ maxValue += amplitude;
419
+ amplitude *= gain;
420
+ frequency *= lacunarity;
421
+ }
422
+ return value / maxValue;
423
+ },
424
+ /**
425
+ * Simplex-like noise (approximation using perlin)
426
+ */
427
+ simplex: (x, y) => {
428
+ return noise.perlin2d(x * 1.2, y * 1.2);
429
+ },
430
+ /**
431
+ * Worley/Cellular noise
432
+ */
433
+ worley: (x, y, z) => {
434
+ const xi = Math.floor(x);
435
+ const yi = Math.floor(y);
436
+ const zi = Math.floor(z);
437
+ let minDist = Infinity;
438
+ for (let i = -1; i <= 1; i++) {
439
+ for (let j = -1; j <= 1; j++) {
440
+ for (let k = -1; k <= 1; k++) {
441
+ const cellX = xi + i;
442
+ const cellY = yi + j;
443
+ const cellZ = zi + k;
444
+ // Pseudo-random point in cell
445
+ const hash = perm[(perm[(perm[cellX & 255] + cellY) & 255] + cellZ) & 255];
446
+ const px = cellX + (hash / 255);
447
+ const py = cellY + ((hash * 7) % 255) / 255;
448
+ const pz = cellZ + ((hash * 13) % 255) / 255;
449
+ const dist = (x - px) * (x - px) + (y - py) * (y - py) + (z - pz) * (z - pz);
450
+ minDist = Math.min(minDist, dist);
451
+ }
452
+ }
453
+ }
454
+ return Math.sqrt(minDist);
455
+ },
456
+ };
457
+ // =============================================================================
458
+ // RANDOM
459
+ // =============================================================================
460
+ export const random = {
461
+ /**
462
+ * Random float between 0 and 1
463
+ */
464
+ float: () => Math.random(),
465
+ /**
466
+ * Random float in range [min, max)
467
+ */
468
+ range: (min, max) => min + Math.random() * (max - min),
469
+ /**
470
+ * Random integer in range [min, max]
471
+ */
472
+ int: (min, max) => Math.floor(min + Math.random() * (max - min + 1)),
473
+ /**
474
+ * Random boolean with probability
475
+ */
476
+ bool: (probability = 0.5) => Math.random() < probability,
477
+ /**
478
+ * Random element from array
479
+ */
480
+ pick: (array) => array[Math.floor(Math.random() * array.length)],
481
+ /**
482
+ * Shuffle array (Fisher-Yates)
483
+ */
484
+ shuffle: (array) => {
485
+ const result = [...array];
486
+ for (let i = result.length - 1; i > 0; i--) {
487
+ const j = Math.floor(Math.random() * (i + 1));
488
+ [result[i], result[j]] = [result[j], result[i]];
489
+ }
490
+ return result;
491
+ },
492
+ /**
493
+ * Random Vec3 in unit sphere
494
+ */
495
+ insideUnitSphere: () => {
496
+ const theta = Math.random() * TAU;
497
+ const phi = Math.acos(2 * Math.random() - 1);
498
+ const r = Math.cbrt(Math.random());
499
+ return {
500
+ x: r * Math.sin(phi) * Math.cos(theta),
501
+ y: r * Math.sin(phi) * Math.sin(theta),
502
+ z: r * Math.cos(phi),
503
+ };
504
+ },
505
+ /**
506
+ * Random Vec3 on unit sphere surface
507
+ */
508
+ onUnitSphere: () => {
509
+ const theta = Math.random() * TAU;
510
+ const phi = Math.acos(2 * Math.random() - 1);
511
+ return {
512
+ x: Math.sin(phi) * Math.cos(theta),
513
+ y: Math.sin(phi) * Math.sin(theta),
514
+ z: Math.cos(phi),
515
+ };
516
+ },
517
+ /**
518
+ * Random Vec2 in unit circle
519
+ */
520
+ insideUnitCircle: () => {
521
+ const theta = Math.random() * TAU;
522
+ const r = Math.sqrt(Math.random());
523
+ return {
524
+ x: r * Math.cos(theta),
525
+ y: r * Math.sin(theta),
526
+ };
527
+ },
528
+ /**
529
+ * Seeded random number generator
530
+ */
531
+ seeded: (seed) => {
532
+ let s = seed;
533
+ return () => {
534
+ s = (s * 1103515245 + 12345) & 0x7fffffff;
535
+ return s / 0x7fffffff;
536
+ };
537
+ },
538
+ };
539
+ //# sourceMappingURL=math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}