@holoscript/std 2.1.0 → 3.1.1

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 (85) hide show
  1. package/README.md +197 -0
  2. package/dist/__tests__/EconomicPrimitives.test.d.ts.map +1 -0
  3. package/dist/__tests__/EconomicTraits.test.d.ts.map +1 -0
  4. package/dist/__tests__/SimulationLabPrimitives.test.d.ts.map +1 -0
  5. package/dist/__tests__/Sprint33.test.d.ts.map +1 -0
  6. package/dist/__tests__/Sprint56.test.d.ts.map +1 -0
  7. package/dist/__tests__/collections.test.d.ts.map +1 -0
  8. package/dist/__tests__/events.test.d.ts.map +1 -0
  9. package/dist/__tests__/materials.test.d.ts.map +1 -0
  10. package/dist/__tests__/math.test.d.ts.map +1 -0
  11. package/dist/__tests__/physics.test.d.ts.map +1 -0
  12. package/dist/__tests__/spatial.test.d.ts.map +1 -0
  13. package/dist/__tests__/string-decoupled.test.d.ts.map +1 -0
  14. package/dist/__tests__/string.test.d.ts.map +1 -0
  15. package/dist/__tests__/time.test.d.ts.map +1 -0
  16. package/dist/collections.d.ts.map +1 -1
  17. package/dist/events.d.ts.map +1 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +42 -9
  20. package/dist/materials.d.ts.map +1 -0
  21. package/dist/math.d.ts.map +1 -1
  22. package/dist/physics.d.ts.map +1 -0
  23. package/dist/spatial.d.ts.map +1 -0
  24. package/dist/string.d.ts.map +1 -1
  25. package/dist/time.d.ts.map +1 -1
  26. package/dist/traits/ARTraits.d.ts.map +1 -0
  27. package/dist/traits/EconomicPrimitives.d.ts.map +1 -0
  28. package/dist/traits/EconomicTraits.d.ts.map +1 -0
  29. package/dist/traits/IoTTraits.d.ts.map +1 -0
  30. package/dist/traits/SimulationLabPrimitives.d.ts.map +1 -0
  31. package/dist/traits/SimulationLabTraits.d.ts.map +1 -0
  32. package/dist/traits/VRRTraits.d.ts.map +1 -0
  33. package/dist/types.d.ts.map +1 -1
  34. package/package.json +17 -6
  35. package/src/__tests__/EconomicPrimitives.test.ts +690 -0
  36. package/src/__tests__/EconomicTraits.test.ts +425 -0
  37. package/src/__tests__/SimulationLabPrimitives.test.ts +415 -0
  38. package/src/__tests__/Sprint33.test.ts +1301 -0
  39. package/src/__tests__/Sprint56.test.ts +1070 -0
  40. package/src/__tests__/collections.test.ts +182 -0
  41. package/src/__tests__/events.test.ts +135 -0
  42. package/src/__tests__/materials.test.ts +84 -0
  43. package/src/__tests__/math.test.ts +246 -0
  44. package/src/__tests__/physics.test.ts +83 -0
  45. package/src/__tests__/spatial.test.ts +333 -0
  46. package/src/__tests__/string-decoupled.test.ts +16 -0
  47. package/src/__tests__/string.test.ts +164 -0
  48. package/src/__tests__/time.test.ts +110 -0
  49. package/src/collections.ts +8 -2
  50. package/src/events.ts +88 -0
  51. package/src/index.ts +161 -11
  52. package/src/materials.ts +109 -0
  53. package/src/math.ts +30 -14
  54. package/src/physics.ts +141 -0
  55. package/src/spatial.ts +320 -0
  56. package/src/string.basic.test.ts +14 -0
  57. package/src/string.test.ts +335 -0
  58. package/src/string.ts +19 -2
  59. package/src/time.ts +9 -10
  60. package/src/traits/ARTraits.ts +103 -0
  61. package/src/traits/EconomicPrimitives.ts +755 -0
  62. package/src/traits/EconomicTraits.ts +552 -0
  63. package/src/traits/IoTTraits.ts +102 -0
  64. package/src/traits/SimulationLabPrimitives.ts +650 -0
  65. package/src/traits/SimulationLabTraits.ts +191 -0
  66. package/src/traits/VRRTraits.ts +326 -0
  67. package/src/types.ts +47 -12
  68. package/vitest.config.ts +10 -0
  69. package/dist/collections.d.ts +0 -177
  70. package/dist/collections.js +0 -720
  71. package/dist/collections.js.map +0 -1
  72. package/dist/index.d.ts +0 -89
  73. package/dist/index.js.map +0 -1
  74. package/dist/math.d.ts +0 -162
  75. package/dist/math.js +0 -539
  76. package/dist/math.js.map +0 -1
  77. package/dist/string.d.ts +0 -208
  78. package/dist/string.js +0 -443
  79. package/dist/string.js.map +0 -1
  80. package/dist/time.d.ts +0 -215
  81. package/dist/time.js +0 -530
  82. package/dist/time.js.map +0 -1
  83. package/dist/types.d.ts +0 -193
  84. package/dist/types.js +0 -198
  85. package/dist/types.js.map +0 -1
package/dist/math.js DELETED
@@ -1,539 +0,0 @@
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
package/dist/math.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}