@neutrinoparticles/js-v1.0 1.0.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.
@@ -0,0 +1,1361 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = global || self, factory(global.Neutrino = {}));
5
+ }(this, (function (exports) { 'use strict';
6
+
7
+ function Context() {
8
+ var ctx = this;
9
+
10
+ this.equalv3_ = function (a, b) {
11
+ return a[0] == b[0] && a[1] == b[1] && a[2] == b[2];
12
+ };
13
+
14
+ this.equalq_ = function (a, b) {
15
+ return a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3];
16
+ };
17
+
18
+ this.a = function (r, a, b) {
19
+ r[0] = a[0] + b[0];
20
+ r[1] = a[1] + b[1];
21
+ };
22
+
23
+ this.b = function (a, b) {
24
+ return [a[0] + b[0], a[1] + b[1]];
25
+ };
26
+
27
+ this.y = function (r, a, s) {
28
+ r[0] = a[0] + s;
29
+ r[1] = a[1] + s;
30
+ };
31
+
32
+ this.z = function (a, s) {
33
+ return [a[0] + s, a[1] + s];
34
+ };
35
+
36
+ this.c = function (r, a, b) {
37
+ r[0] = a[0] + b[0];
38
+ r[1] = a[1] + b[1];
39
+ r[2] = a[2] + b[2];
40
+ };
41
+
42
+ this.d = function (a, b) {
43
+ return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
44
+ };
45
+
46
+ this.C = function (r, a, s) {
47
+ r[0] = a[0] + s;
48
+ r[1] = a[1] + s;
49
+ r[2] = a[2] + s;
50
+ };
51
+
52
+ this.D = function (a, s) {
53
+ return [a[0] + s, a[1] + s, a[2] + s];
54
+ };
55
+
56
+ this.addq = function (r, a, b) {
57
+ r[0] = a[0] + b[0];
58
+ r[1] = a[1] + b[1];
59
+ r[2] = a[2] + b[2];
60
+ r[3] = a[3] + b[3];
61
+ };
62
+
63
+ this.addq_ = function (a, b) {
64
+ return [a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]];
65
+ };
66
+
67
+ this.e = function (r, a, b) {
68
+ r[0] = a[0] - b[0];
69
+ r[1] = a[1] - b[1];
70
+ };
71
+
72
+ this.f = function (a, b) {
73
+ return [a[0] - b[0], a[1] - b[1]];
74
+ };
75
+
76
+ this.A = function (r, a, s) {
77
+ r[0] = a[0] - s;
78
+ r[1] = a[1] - s;
79
+ };
80
+
81
+ this.B = function (a, s) {
82
+ return [a[0] - s, a[1] - s];
83
+ };
84
+
85
+ this.nf = function (r, s, a) {
86
+ r[0] = s - a[0];
87
+ r[1] = s - a[1];
88
+ };
89
+
90
+ this.of = function (s, a) {
91
+ return [s - a[0], s - a[1]];
92
+ };
93
+
94
+ this.g = function (r, a, b) {
95
+ r[0] = a[0] - b[0];
96
+ r[1] = a[1] - b[1];
97
+ r[2] = a[2] - b[2];
98
+ };
99
+
100
+ this.h = function (a, b) {
101
+ return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
102
+ };
103
+
104
+ this.E = function (r, a, s) {
105
+ r[0] = a[0] - s;
106
+ r[1] = a[1] - s;
107
+ r[2] = a[2] - s;
108
+ };
109
+
110
+ this.F = function (a, s) {
111
+ return [a[0] - s, a[1] - s, a[2] - s];
112
+ };
113
+
114
+ this.rf = function (r, s, a) {
115
+ r[0] = s - a[0];
116
+ r[1] = s - a[1];
117
+ r[2] = s - a[2];
118
+ };
119
+
120
+ this.sf = function (s, a) {
121
+ return [s - a[0], s - a[1], s - a[2]];
122
+ };
123
+
124
+ this.i = function (r, a, b) {
125
+ r[0] = a[0] * b[0];
126
+ r[1] = a[1] * b[1];
127
+ };
128
+
129
+ this.j = function (a, b) {
130
+ return [a[0] * b[0], a[1] * b[1]];
131
+ };
132
+
133
+ this.k = function (r, a, b) {
134
+ r[0] = a[0] * b[0];
135
+ r[1] = a[1] * b[1];
136
+ r[2] = a[2] * b[2];
137
+ };
138
+
139
+ this.l = function (a, b) {
140
+ return [a[0] * b[0], a[1] * b[1], a[2] * b[2]];
141
+ };
142
+
143
+ this.m = function (r, a, b) {
144
+ r[0] = a[0] / b[0];
145
+ r[1] = a[1] / b[1];
146
+ };
147
+
148
+ this.n = function (a, b) {
149
+ return [a[0] / b[0], a[1] / b[1]];
150
+ };
151
+
152
+ this.o = function (r, a, b) {
153
+ r[0] = a[0] / b[0];
154
+ r[1] = a[1] / b[1];
155
+ r[2] = a[2] / b[2];
156
+ };
157
+
158
+ this.p = function (a, b) {
159
+ return [a[0] / b[0], a[1] / b[1], a[2] / b[2]];
160
+ };
161
+
162
+ this.H = function (a, b) {
163
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
164
+ };
165
+
166
+ this.dotq_ = function (a, b) {
167
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
168
+ };
169
+
170
+ this.q = function (r, a, s) {
171
+ r[0] = a[0] * s;
172
+ r[1] = a[1] * s;
173
+ };
174
+
175
+ this.r = function (a, s) {
176
+ return [a[0] * s, a[1] * s];
177
+ };
178
+
179
+ this.s = function (r, a, s) {
180
+ r[0] = a[0] / s;
181
+ r[1] = a[1] / s;
182
+ };
183
+
184
+ this.t = function (a, s) {
185
+ return [a[0] / s, a[1] / s];
186
+ };
187
+
188
+ this.u = function (r, a, s) {
189
+ r[0] = a[0] * s;
190
+ r[1] = a[1] * s;
191
+ r[2] = a[2] * s;
192
+ };
193
+
194
+ this.v = function (a, s) {
195
+ return [a[0] * s, a[1] * s, a[2] * s];
196
+ };
197
+
198
+ this.w = function (r, a, s) {
199
+ r[0] = a[0] / s;
200
+ r[1] = a[1] / s;
201
+ r[2] = a[2] / s;
202
+ };
203
+
204
+ this.x = function (a, s) {
205
+ return [a[0] / s, a[1] / s, a[2] / s];
206
+ };
207
+
208
+ this.y = function (r, a, s) {
209
+ r[0] = a[0] + s;
210
+ r[1] = a[1] + s;
211
+ };
212
+
213
+ this.z = function (a, s) {
214
+ return [a[0] + s, a[1] + s];
215
+ };
216
+
217
+ this.A = function (r, a, s) {
218
+ r[0] = a[0] - s;
219
+ r[1] = a[1] - s;
220
+ };
221
+
222
+ this.B = function (a, s) {
223
+ return [a[0] - s, a[1] - s];
224
+ };
225
+
226
+ this.G = function (a, b) {
227
+ return a[0] * b[0] + a[1] * b[1];
228
+ };
229
+
230
+ this.H = function (a, b) {
231
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
232
+ };
233
+
234
+ this.I = function (r, a, b) {
235
+ var ax = a[0],ay = a[1],az = a[2];
236
+ var bx = b[0],by = b[1],bz = b[2];
237
+
238
+ r[0] = ay * bz - az * by;
239
+ r[1] = az * bx - ax * bz;
240
+ r[2] = ax * by - ay * bx;
241
+ };
242
+
243
+ this.J = function (a, b) {
244
+ var ax = a[0],ay = a[1],az = a[2];
245
+ var bx = b[0],by = b[1],bz = b[2];
246
+
247
+ return [ay * bz - az * by,
248
+ az * bx - ax * bz,
249
+ ax * by - ay * bx];
250
+ };
251
+
252
+ this.K = function (a) {
253
+ return Math.sqrt(a[0] * a[0] + a[1] * a[1]);
254
+ };
255
+
256
+ this.L = function (a) {
257
+ return a[0] * a[0] + a[1] * a[1];
258
+ };
259
+
260
+ this.M = function (r, a) {
261
+ ctx.q(r, a, 1.0 / ctx.K(a));
262
+ };
263
+
264
+ this.N = function (a) {
265
+ return ctx.r(a, 1.0 / ctx.K(a));
266
+ };
267
+
268
+ this.O = function (a) {
269
+ return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]);
270
+ };
271
+
272
+ this.P = function (a) {
273
+ return a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
274
+ };
275
+
276
+ this.Q = function (r, a) {
277
+ ctx.u(r, a, 1.0 / ctx.O(a));
278
+ };
279
+
280
+ this.R = function (a) {
281
+ return ctx.v(a, 1.0 / ctx.O(a));
282
+ };
283
+
284
+ this.S = function (r, a) {
285
+ r[0] = a[0];
286
+ r[1] = a[1];
287
+ };
288
+
289
+ this.T = function (r, a) {
290
+ r[0] = a[0];
291
+ r[1] = a[1];
292
+ r[2] = a[2];
293
+ };
294
+
295
+ this.U = function (r, a) {
296
+ r[0] = a[0];
297
+ r[1] = a[1];
298
+ r[2] = a[2];
299
+ r[3] = a[3];
300
+ };
301
+
302
+ this.V = function (r, x, y) {
303
+ r[0] = x;
304
+ r[1] = y;
305
+ };
306
+
307
+ this.W = function (r, x, y, z) {
308
+ r[0] = x;
309
+ r[1] = y;
310
+ r[2] = z;
311
+ };
312
+
313
+ this.X = function (a, b, i) {
314
+ return a + (b - a) * i;
315
+ };
316
+
317
+ this.Y = function (r, a, b, i) {
318
+ r[0] = a[0] + (b[0] - a[0]) * i;
319
+ r[1] = a[1] + (b[1] - a[1]) * i;
320
+ };
321
+
322
+ this.Z = function (a, b, i) {
323
+ return [a[0] + (b[0] - a[0]) * i,
324
+ a[1] + (b[1] - a[1]) * i];
325
+ };
326
+
327
+ this.ab = function (r, a, b, i) {
328
+ r[0] = a[0] + (b[0] - a[0]) * i;
329
+ r[1] = a[1] + (b[1] - a[1]) * i;
330
+ r[2] = a[2] + (b[2] - a[2]) * i;
331
+ };
332
+
333
+ this.bb = function (a, b, i) {
334
+ return [a[0] + (b[0] - a[0]) * i,
335
+ a[1] + (b[1] - a[1]) * i,
336
+ a[2] + (b[2] - a[2]) * i];
337
+ };
338
+
339
+ this.slerpq = function (r, x, y, a) {
340
+ var cosTheta = ctx.dotq_(x, y);
341
+
342
+ var z = [];
343
+
344
+ if (cosTheta < 0) {
345
+ ctx.negq(z, y);
346
+ cosTheta = -cosTheta;
347
+ } else
348
+ {
349
+ ctx.U(z, y);
350
+ }
351
+
352
+ if (1.0 - cosTheta < Number.EPSILON) {
353
+ r[0] = ctx.X(x[0], y[0], a);
354
+ r[1] = ctx.X(x[1], y[1], a);
355
+ r[2] = ctx.X(x[2], y[2], a);
356
+ r[3] = ctx.X(x[3], y[3], a);
357
+ } else
358
+ {
359
+ var Md = ctx.acos_(cosTheta);
360
+
361
+ ctx.mulqscalar(r, ctx.addq_(ctx.mulqscalar_(x, ctx.sin_((1.0 - a) * Md)), ctx.mulqscalar_(z, ctx.sin_(a * Md))),
362
+ 1.0 / ctx.sin_(Md));
363
+ }
364
+ };
365
+
366
+ this.slerpq_ = function (x, y, a) {
367
+ var r = [];
368
+ slerpq(r, x, y, a);
369
+ return r;
370
+ };
371
+
372
+ //trigonometry
373
+
374
+ this.acos_ = function (a) {
375
+ return Math.acos(a);
376
+ };
377
+
378
+ this.sin_ = function (a) {
379
+ return Math.sin(a);
380
+ };
381
+
382
+ this.cos_ = function (a) {
383
+ return Math.cos(a);
384
+ };
385
+
386
+ // random
387
+
388
+ this.taus88 = function (seed)
389
+ {
390
+ if (!seed)
391
+ seed = 0;
392
+
393
+ var value0, value1, value2;
394
+
395
+ this.seed = function (s0) {
396
+ s0 &= 0xFFFFFFFF;
397
+
398
+ value0 = s0 < 2 ? s0 + 2 : s0;
399
+ value1 = s0 < 8 ? s0 + 8 : s0;
400
+ value2 = s0 < 16 ? s0 + 16 : s0;
401
+ };
402
+
403
+ this.rand = function () {
404
+ var b = ((value0 << 13 ^ value0) & 0xFFFFFFFF) >>> 19;
405
+ value0 = ((value0 & 0xFFFFFFFE) << 12 ^ b) >>> 0;
406
+
407
+ b = ((value1 << 2 ^ value1) & 0xFFFFFFFF) >>> 25;
408
+ value1 = ((value1 & 0xFFFFFFF8) << 4 ^ b) >>> 0;
409
+
410
+ b = ((value2 << 3 ^ value2) & 0xFFFFFFFF) >>> 11;
411
+ value2 = ((value2 & 0xFFFFFFF0) << 17 ^ b) >>> 0;
412
+
413
+ var engine = (value0 ^ value1 ^ value2) >>> 0;
414
+ return engine / 4294967296.0;
415
+ };
416
+
417
+ this.seed(seed);
418
+ };
419
+
420
+ this.cb = function (r, radius) {
421
+ this.randv2gen(r, radius, function () {return Math.random();});
422
+ };
423
+
424
+ this.randv2gen = function (r, radius, gen) {
425
+ var Md = gen() * Math.PI * 2.0;
426
+ r[0] = radius * ctx.cos_(Md);
427
+ r[1] = radius * ctx.sin_(Md);
428
+ };
429
+
430
+ this.db = function (r, radius) {
431
+ this.randv3gen(r, radius, function () {return Math.random();});
432
+ };
433
+
434
+ this.randv3gen = function (r, radius, gen) {
435
+ var theta = gen() * Math.PI * 2.0;
436
+ var z = -1.0 + gen() * 2.0;
437
+ var sqrtInvZ2 = radius * Math.sqrt(1.0 - z * z);
438
+ r[0] = sqrtInvZ2 * ctx.cos_(theta);
439
+ r[1] = sqrtInvZ2 * ctx.sin_(theta);
440
+ r[2] = radius * z;
441
+ };
442
+
443
+ this.yb = function (r, x, y, Nd, gen) {
444
+ var dispx = x + gen() * Nd[0];
445
+ var dispy = y + gen() * Nd[1];
446
+ ctx.V(r, dispx, dispy);
447
+ };
448
+
449
+ this.eb = function (r, a) {
450
+ ctx.V(-a[0], -a[1]);
451
+ };
452
+
453
+ this.fb = function (a) {
454
+ return [-a[0], -a[1]];
455
+ };
456
+
457
+ this.gb = function (r, a) {
458
+ ctx.W(-a[0], -a[1], -a[2]);
459
+ };
460
+
461
+ this.hb = function (a) {
462
+ return [-a[0], -a[1], -a[2]];
463
+ };
464
+
465
+ this.negq = function (r, a) {
466
+ r[0] = -a[0];
467
+ r[1] = -a[1];
468
+ r[2] = -a[2];
469
+ r[3] = -a[3];
470
+ };
471
+
472
+ this.negq_ = function (a) {
473
+ return [-a[0], -a[1], -a[2], -a[3]];
474
+ };
475
+
476
+ this.ib = function (degrees) {
477
+ return degrees / 180.0 * Math.PI;
478
+ };
479
+
480
+ this.jb = function (radians) {
481
+ return radians / Math.PI * 180.0;
482
+ };
483
+
484
+ this.Ae = function (value) {
485
+ return value < 0 ? -1 : 1;
486
+ };
487
+
488
+ this.ob = function (x, y, z, q) {
489
+ var x2 = 2.0 * q[0] * q[0];
490
+ var y2 = 2.0 * q[1] * q[1];
491
+ var z2 = 2.0 * q[2] * q[2];
492
+ var xy = 2.0 * q[0] * q[1];
493
+ var xz = 2.0 * q[0] * q[2];
494
+ var yz = 2.0 * q[1] * q[2];
495
+ var wz = 2.0 * q[3] * q[2];
496
+ var wy = 2.0 * q[3] * q[1];
497
+ var wx = 2.0 * q[3] * q[0];
498
+
499
+ x[0] = 1.0 - y2 - z2;
500
+ x[1] = xy + wz;
501
+ x[2] = xz - wy;
502
+
503
+ y[0] = xy - wz;
504
+ y[1] = 1.0 - x2 - z2;
505
+ y[2] = yz + wx;
506
+
507
+ z[0] = xz + wy;
508
+ z[1] = yz - wx;
509
+ z[2] = 1.0 - x2 - y2;
510
+ };
511
+
512
+ this.pb = function (q, x, y, z) {
513
+ var tr = x[0] + y[1] + z[2];
514
+
515
+ if (tr > 0) {
516
+ var S = Math.sqrt(tr + 1.0) * 2;
517
+ q[3] = 0.25 * S;
518
+ q[0] = (y[2] - z[1]) / S;
519
+ q[1] = (z[0] - x[2]) / S;
520
+ q[2] = (x[1] - y[0]) / S;
521
+ } else if (x[0] > y[1] & x[0] > z[2]) {
522
+ var S = Math.sqrt(1.0 + x[0] - y[1] - z[2]) * 2;
523
+ q[3] = (y[2] - z[1]) / S;
524
+ q[0] = 0.25 * S;
525
+ q[1] = (x[1] + y[0]) / S;
526
+ q[2] = (z[0] + x[2]) / S;
527
+ } else if (y[1] > z[2]) {
528
+ var S = Math.sqrt(1.0 + y[1] - x[0] - z[2]) * 2;
529
+ q[3] = (z[0] - x[2]) / S;
530
+ q[0] = (x[1] + y[0]) / S;
531
+ q[1] = 0.25 * S;
532
+ q[2] = (y[2] + z[1]) / S;
533
+ } else {
534
+ var S = Math.sqrt(1.0 + z[2] - x[0] - y[1]) * 2;
535
+ q[3] = (x[1] - y[0]) / S;
536
+ q[0] = (z[0] + x[2]) / S;
537
+ q[1] = (y[2] + z[1]) / S;
538
+ q[2] = 0.25 * S;
539
+ }
540
+ };
541
+
542
+ this. /**/axes2quat = this.pb;
543
+
544
+ this.qb = function (q, x, a) {
545
+ var ha = ctx.ib(a) * 0.5,s = Math.sin(ha);
546
+ q[0] = x[0] * s;
547
+ q[1] = x[1] * s;
548
+ q[2] = x[2] * s;
549
+ q[3] = Math.cos(ha);
550
+ };
551
+
552
+ this. /**/axisangle2quat = this.qb;
553
+
554
+ this.axisangle2quat_ = function (x, a) {
555
+ var ha = ctx.ib(a) * 0.5,s = Math.sin(ha);
556
+ return [x[0] * s, x[1] * s, x[2] * s, ctx.cos_(ha)];
557
+ };
558
+
559
+ this. /**/axisangle2quat_ = this.axisangle2quat_;
560
+
561
+ this.rb = function (r, v, q) {
562
+ var x = v[0];
563
+ var y = v[1];
564
+ var z = v[2];
565
+
566
+ var qx = q[0];
567
+ var qy = q[1];
568
+ var qz = q[2];
569
+ var qw = q[3];
570
+
571
+ var ix = qw * x + qy * z - qz * y;
572
+ var iy = qw * y + qz * x - qx * z;
573
+ var iz = qw * z + qx * y - qy * x;
574
+ var iw = -qx * x - qy * y - qz * z;
575
+
576
+ r[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;
577
+ r[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;
578
+ r[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;
579
+ };
580
+
581
+ this.sb = function (r, a, b) {
582
+ var qax = a[0],qay = a[1],qaz = a[2],qaw = a[3];
583
+ var qbx = b[0],qby = b[1],qbz = b[2],qbw = b[3];
584
+
585
+ r[0] = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;
586
+ r[1] = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;
587
+ r[2] = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;
588
+ r[3] = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;
589
+ };
590
+
591
+ this.mulqscalar = function (r, a, s) {
592
+ r[0] = a[0] * s;
593
+ r[1] = a[1] * s;
594
+ r[2] = a[2] * s;
595
+ r[3] = a[3] * s;
596
+ };
597
+
598
+ this.mulqscalar_ = function (a, s) {
599
+ return [a[0] * s, a[1] * s, a[2] * s, a[3] * s];
600
+ };
601
+
602
+ this.tb = function (r, Hf, degree, scale, v) {
603
+ var rad = ctx.ib(degree);
604
+ var cos = Math.cos(rad) * scale;
605
+ var sin = Math.sin(rad) * scale;
606
+ r[0] = Hf[0] + cos * v[0] - sin * v[1];
607
+ r[1] = Hf[1] + sin * v[0] + cos * v[1];
608
+ };
609
+
610
+ this.ub = function (r, Hf, degree, scale, v) {
611
+ var rad = ctx.ib(degree);
612
+ var cos = Math.cos(rad) / scale;
613
+ var sin = Math.sin(rad) / scale;
614
+
615
+ r[0] = cos * v[0] + sin * v[1] - Hf[0] * cos - Hf[1] * sin;
616
+ r[1] = cos * v[1] - sin * v[0] + Hf[0] * sin - Hf[1] * cos;
617
+ };
618
+
619
+ this.vb = function (val) {
620
+ if (val < 0)
621
+ return Math.floor(ctx.yd - 1 + val % ctx.yd);else
622
+
623
+ return Math.floor(val % ctx.yd);
624
+ };
625
+
626
+ function colorCompToHex_(c) {
627
+ return c < 16 ? "0" + c.toString(16) : c.toString(16);
628
+ }
629
+
630
+ this.ff = function (rgb) {
631
+ return "#" +
632
+ colorCompToHex_(Math.floor(rgb[0] * 255)) +
633
+ colorCompToHex_(Math.floor(rgb[1] * 255)) +
634
+ colorCompToHex_(Math.floor(rgb[2] * 255));
635
+ };
636
+
637
+ this.tf = function (vf, xf, yf, a, b, zf) {
638
+ var ca = ctx.f(a, vf);
639
+ var cb = ctx.f(b, vf);
640
+
641
+ var wf = ctx.r(xf, yf);
642
+
643
+ if (ca[0] < -wf[0] && cb[0] < -wf[0] ||
644
+ ca[0] > wf[0] && cb[0] > wf[0] ||
645
+ ca[1] < -wf[1] && cb[1] < -wf[1] ||
646
+ ca[1] > wf[1] && cb[1] > wf[1])
647
+ {
648
+ return false;
649
+ }
650
+
651
+ if (ca[0] <= wf[0] && ca[0] >= -wf[0] && ca[1] <= wf[1] && ca[1] >= -wf[1])
652
+ return true;
653
+
654
+ if (zf < 0.000001)
655
+ return false;
656
+
657
+ if (cb[0] <= wf[0] && cb[0] >= -wf[0] && cb[1] <= wf[1] && cb[1] >= -wf[1])
658
+ return true;
659
+
660
+ var Af = ctx.f(b, a);ctx.s(Af, Af, zf);
661
+ var Bf = [-Af[1], Af[0]];
662
+ var Cf = Math.abs(ctx.G(Bf, cb));
663
+
664
+ if (Math.abs(ctx.G(Bf, wf)) >= Cf) {
665
+ var Df = [-xf[1], xf[0]];
666
+ if (ctx.G(Df, ca) * ctx.G(Df, cb) <= 0.0) {
667
+ return true;
668
+ }
669
+ } else if (Math.abs(ctx.G(Bf, [wf[0], -wf[1]])) >= Cf) {
670
+ var _Df = [xf[1], xf[0]];
671
+ if (ctx.G(_Df, ca) * ctx.G(_Df, cb) <= 0.0) {
672
+ return true;
673
+ }
674
+ }
675
+
676
+ return false;
677
+ };
678
+
679
+ this.uf = function (vf, xf, yf, a, b, zf, Ef) {
680
+ var ca = ctx.f(a, vf);
681
+ var cb = ctx.f(b, vf);
682
+
683
+ var wf = ctx.r(xf, yf);
684
+
685
+ if (zf < 0.000001)
686
+ return false;
687
+
688
+ if (ca[0] < -wf[0] && cb[0] < -wf[0] ||
689
+ ca[0] > wf[0] && cb[0] > wf[0] ||
690
+ ca[1] < -wf[1] && cb[1] < -wf[1] ||
691
+ ca[1] > wf[1] && cb[1] > wf[1])
692
+ {
693
+ return false;
694
+ }
695
+
696
+ var Af = ctx.f(b, a);ctx.s(Af, Af, zf);
697
+ var Bf = [-Af[1], Af[0]];
698
+ var Cf = Math.abs(ctx.G(Bf, cb));
699
+
700
+ if (Ef) {
701
+ if (Math.abs(ctx.G(Bf, wf)) >= Cf) {
702
+ var Df = [-xf[1], xf[0]];
703
+ if (ctx.G(Df, ca) * ctx.G(Df, cb) <= 0.0) {
704
+ return true;
705
+ }
706
+ }
707
+ } else {
708
+ if (Math.abs(ctx.G(Bf, [wf[0], -wf[1]])) >= Cf) {
709
+ var _Df2 = [xf[1], xf[0]];
710
+ if (ctx.G(_Df2, ca) * ctx.G(_Df2, cb) <= 0.0) {
711
+ return true;
712
+ }
713
+ }
714
+ }
715
+
716
+ return false;
717
+ };
718
+
719
+ this.wb = function (r, x, y, z) {
720
+ var rgbDisp = 3 * (y * ctx.yd + x);
721
+ var view = ctx.zd[z];
722
+
723
+ r[0] = view.getUint8(rgbDisp);
724
+ r[1] = view.getUint8(rgbDisp + 1);
725
+ r[2] = view.getUint8(rgbDisp + 2);
726
+ };
727
+
728
+ this.xb = function (r, Hf) {
729
+ if (ctx.zd == null) {
730
+ ctx.W(r, 128, 128, 128);
731
+ return;
732
+ }
733
+
734
+ var scaledPosX = Hf[0] * ctx.yd;
735
+ var scaledPosY = Hf[1] * ctx.yd;
736
+ var scaledPosZ = Hf[2] * ctx.yd;
737
+
738
+ var floorX = Math.floor(scaledPosX);
739
+ var floorY = Math.floor(scaledPosY);
740
+ var floorZ = Math.floor(scaledPosZ);
741
+
742
+ var fracX = scaledPosX - floorX;
743
+ var fracY = scaledPosY - floorY;
744
+ var fracZ = scaledPosZ - floorZ;
745
+
746
+ var noiseX = ctx.vb(floorX);
747
+ var noiseX1 = ctx.vb(floorX + 1);
748
+ var noiseY = ctx.vb(floorY);
749
+ var noiseY1 = ctx.vb(floorY + 1);
750
+ var noiseZ = ctx.vb(floorZ);
751
+ var noiseZ1 = ctx.vb(floorZ + 1);
752
+
753
+ var value000 = [],value001 = [],value010 = [],value011 = [],
754
+ value100 = [],value101 = [],value110 = [],value111 = [];
755
+
756
+ ctx.wb(value000, noiseX, noiseY, noiseZ);
757
+ ctx.wb(value001, noiseX, noiseY, noiseZ1);
758
+ ctx.wb(value010, noiseX, noiseY1, noiseZ);
759
+ ctx.wb(value011, noiseX, noiseY1, noiseZ1);
760
+ ctx.wb(value100, noiseX1, noiseY, noiseZ);
761
+ ctx.wb(value101, noiseX1, noiseY, noiseZ1);
762
+ ctx.wb(value110, noiseX1, noiseY1, noiseZ);
763
+ ctx.wb(value111, noiseX1, noiseY1, noiseZ1);
764
+
765
+ var value00 = [],value01 = [],value10 = [],value11 = [];
766
+ ctx.ab(value00, value000, value001, fracZ);
767
+ ctx.ab(value01, value010, value011, fracZ);
768
+ ctx.ab(value10, value100, value101, fracZ);
769
+ ctx.ab(value11, value110, value111, fracZ);
770
+
771
+ var value0 = [],value1 = [];
772
+ ctx.ab(value0, value00, value01, fracY);
773
+ ctx.ab(value1, value10, value11, fracY);
774
+
775
+ ctx.ab(r, value0, value1, fracX);
776
+ };
777
+
778
+ this.ImageDesc = function (image, x, y, width, height) {
779
+ this.image = image;
780
+ this.x = x;
781
+ this.y = y;
782
+ this.width = width;
783
+ this.height = height;
784
+ };
785
+
786
+ this.RenderCall = function (startIndex, numIndices, renderStyleIndex) {
787
+ this.startIndex = startIndex;
788
+ this.numIndices = numIndices;
789
+ this.renderStyleIndex = renderStyleIndex;
790
+ };
791
+
792
+ this.SubRect = function (x, y, width, height) {
793
+ this.x = x;
794
+ this.y = y;
795
+ this.width = width;
796
+ this.height = height;
797
+ };
798
+
799
+ this.Camera2D = function () {
800
+ };
801
+
802
+ this.Camera2D.prototype.tb = function (Hf, Nd) {
803
+ return true;
804
+ };
805
+
806
+ this.Camera3D = function (/**/screenSize, /**/horizAngle) {
807
+ this.Qd = ctx.r(/**/screenSize, 0.5);
808
+ this.z = -(/**/screenSize[0] * 0.5) / Math.tan(ctx.ib(/**/horizAngle * 0.5));
809
+ };
810
+
811
+ this.Camera3D.prototype. /**/transform = function (/**/pos, /**/size) {
812
+ if (/**/pos[2] < this.z)
813
+ return false;
814
+
815
+ var scale = -this.z / (/**/pos[2] - this.z);
816
+ ctx.a(/**/pos, ctx.r(ctx.f(/**/pos, this.Qd), scale), this.Qd);
817
+ ctx.q(/**/size, /**/size, scale);
818
+
819
+ return true;
820
+ };
821
+
822
+ this.zd = null;
823
+ this.yd = 0;
824
+
825
+ this.initializeNoise = function (path, onloadcallback, onfailcallback) {
826
+
827
+ // Backward compatibility: if noise already initialized just callback success.
828
+ if (this.zd != null) {
829
+ if (onloadcallback) onloadcallback();
830
+ return;
831
+ }
832
+
833
+ if (path == null || path === undefined) path = this.defaultPath || "";
834
+ if (!path) {
835
+ if (onfailcallback) onfailcallback(new Error("Noise path not specified"));
836
+ return;
837
+ }
838
+
839
+ var url = path + "neutrinoparticles.noise.bin";
840
+ var request = new XMLHttpRequest();
841
+ request.open("GET", url, true);
842
+ request.responseType = "arraybuffer";
843
+ request.ctx = this;
844
+
845
+ var fail = function fail(err) {if (onfailcallback) try {onfailcallback(err instanceof Error ? err : new Error(String(err)));} catch (_) {}};
846
+ var succeed = function succeed() {if (onloadcallback) try {onloadcallback();} catch (_) {}};
847
+
848
+ request.onerror = function () {fail(new Error("Network error while loading noise file"));};
849
+ request.onabort = function () {fail(new Error("Request aborted while loading noise file"));};
850
+
851
+ request.onload = function () {
852
+ try {
853
+ if (!(request.status >= 200 && request.status < 300 || request.status === 304)) {
854
+ fail(new Error("HTTP status " + request.status));
855
+ return;
856
+ }
857
+
858
+ var buffer = request.response;
859
+ if (!(buffer instanceof ArrayBuffer) || buffer.byteLength < 4) {
860
+ fail(new Error("Noise file header too small"));
861
+ return;
862
+ }
863
+
864
+ var headerView = new DataView(buffer, 0, 4);
865
+ var planeSize = headerView.getUint32(0, true); // Original format meaning retained
866
+ if (!Number.isFinite(planeSize) || planeSize <= 0) {
867
+ fail(new Error("Invalid planeSize value"));
868
+ return;
869
+ }
870
+
871
+ // Historical format assumption: planeSize doubles as: sideSizePx & planeCount
872
+ // Each plane: sideSizePx * sideSizePx pixels, RGB (3 bytes per pixel)
873
+ var sideSizePx = planeSize;
874
+ var planeCount = planeSize;
875
+ var bytesPerPlane = 3 * sideSizePx * sideSizePx;
876
+ var expectedBytes = 4 + planeCount * bytesPerPlane;
877
+ if (buffer.byteLength < expectedBytes) {
878
+ fail(new Error("Truncated noise file: have " + buffer.byteLength + " bytes, expected >= " + expectedBytes));
879
+ return;
880
+ }
881
+
882
+ var ctx = request.ctx;
883
+ ctx.zd = new Array(planeCount);
884
+ ctx.yd = sideSizePx; // side length in pixels
885
+
886
+ for (var i = 0; i < planeCount; ++i) {
887
+ var offset = 4 + i * bytesPerPlane;
888
+ ctx.zd[i] = new DataView(buffer, offset, bytesPerPlane); // Explicit length for safety
889
+ }
890
+
891
+ succeed();
892
+ } catch (e) {
893
+ fail(e);
894
+ }
895
+ };
896
+
897
+ try {request.send();} catch (e) {fail(e);}
898
+ };
899
+
900
+ this.NoiseGenerator = function () {
901
+
902
+ var catmullRom_ = function catmullRom_(p0, p1, p2, p3, t) {
903
+ return 0.5 * (2.0 * p1 + (-p0 + p2) * t + (2.0 * p0 - 5.0 * p1 + 4.0 * p2 - p3) * t * t +
904
+ (-p0 + 3.0 * p1 - 3.0 * p2 + p3) * (t * t * t));
905
+ };
906
+
907
+ var catmullRomv3_ = function catmullRomv3_(p0, p1, p2, p3, t) {
908
+ return [
909
+ catmullRom_(p0[0], p1[0], p2[0], p3[0], t),
910
+ catmullRom_(p0[1], p1[1], p2[1], p3[1], t),
911
+ catmullRom_(p0[2], p1[2], p2[2], p3[2], t)];
912
+
913
+ };
914
+
915
+ var clamp_ = function clamp_(a, from, to) {
916
+ return a < from ? from : a > to ? to : a;
917
+ };
918
+
919
+ var imageSize = 64;
920
+ var image = [];
921
+ var tempBuffer = [];
922
+ var tausGenerator = new ctx.taus88(120); // 120 - hardcoded starting seed
923
+ var rand = function rand() {return tausGenerator.rand();};
924
+ var amp = 0.7; // hardcoded amplitude of perlin zd
925
+ var fadeDegree = 1.2; // hardcoded fade degree of each octave
926
+ var prevStep = imageSize;
927
+
928
+ var step, Nd, octSize, octSize2, octMaskSize, octPixels, octZ, octY; // mix step variables
929
+
930
+ var numMixStepIterations = 0;
931
+ var mixStepIteration = 0;
932
+
933
+ for (var i = prevStep >>> 1; i > 0; i >>>= 1) {
934
+ var _octSize = Math.floor(imageSize / i);
935
+ numMixStepIterations += _octSize * _octSize;
936
+ }
937
+
938
+ var States = {
939
+ INITIAL_FILL: 0,
940
+ MIX_STEP_INIT: 1,
941
+ MIX_STEP_PROCESS: 2,
942
+ SCALING: 3,
943
+ DATA_VIEWS: 4,
944
+ FINISHED: 5
945
+ };
946
+
947
+ var Progress = {
948
+ INIT: 0.01,
949
+ MIX: 0.9,
950
+ SCALING: 0.95,
951
+ DATA_VIEWS: 1.0
952
+ };
953
+
954
+ var state = States.INITIAL_FILL;
955
+
956
+ this.progress = 0.0;
957
+
958
+ var initialFill = function initialFill() {
959
+ for (var z = 0; z < imageSize; ++z) {
960
+ var imageZ = image[z] = [];
961
+
962
+ for (var y = 0; y < imageSize; ++y) {
963
+ var imageZY = imageZ[y] = [];
964
+
965
+ for (var x = 0; x < imageSize; ++x) {
966
+ var imageZYX = imageZY[x] = [0.0, 0.0, 0.0];
967
+ }
968
+ }
969
+ }
970
+
971
+ state = States.MIX_STEP_INIT;
972
+ this.progress = Progress.INIT;
973
+ };
974
+
975
+ var mixStepInit = function mixStepInit() {
976
+
977
+ step = prevStep >>> 1;
978
+ Nd = imageSize;
979
+ octSize = Math.floor(Nd / step);
980
+ octSize2 = octSize * octSize;
981
+ octMaskSize = Math.max(octSize - 1, 1);
982
+ octPixels = octSize * octSize * octSize;
983
+ octZ = 0;
984
+ octY = 0;
985
+
986
+ for (var i = 0; i < octPixels; ++i) {
987
+ tempBuffer[i] = [];
988
+ // order is inverted to satisfy c++ obsolete order
989
+ tempBuffer[i][2] = rand() * 2.0 - 1.0;
990
+ tempBuffer[i][1] = rand() * 2.0 - 1.0;
991
+ tempBuffer[i][0] = rand() * 2.0 - 1.0;
992
+ }
993
+
994
+ state = States.MIX_STEP_PROCESS;
995
+ };
996
+
997
+ var mixStepProcess = function mixStepProcess() {
998
+ for (var octX = 0; octX < octSize; ++octX) {
999
+ var octZ0 = octZ - 1 >>> 0 & octMaskSize;
1000
+ var octZ1 = octZ >>> 0 & octMaskSize;
1001
+ var octZ2 = octZ + 1 >>> 0 & octMaskSize;
1002
+ var octZ3 = octZ + 2 >>> 0 & octMaskSize;
1003
+
1004
+ var octY0 = octY - 1 >>> 0 & octMaskSize;
1005
+ var octY1 = octY >>> 0 & octMaskSize;
1006
+ var octY2 = octY + 1 >>> 0 & octMaskSize;
1007
+ var octY3 = octY + 2 >>> 0 & octMaskSize;
1008
+
1009
+ var octX0 = octX - 1 >>> 0 & octMaskSize;
1010
+ var octX1 = octX >>> 0 & octMaskSize;
1011
+ var octX2 = octX + 1 >>> 0 & octMaskSize;
1012
+ var octX3 = octX + 2 >>> 0 & octMaskSize;
1013
+
1014
+ var values = //zyx
1015
+ [
1016
+ [
1017
+ [
1018
+ tempBuffer[octZ0 * octSize2 + octY0 * octSize + octX0],
1019
+ tempBuffer[octZ0 * octSize2 + octY0 * octSize + octX1],
1020
+ tempBuffer[octZ0 * octSize2 + octY0 * octSize + octX2],
1021
+ tempBuffer[octZ0 * octSize2 + octY0 * octSize + octX3]],
1022
+
1023
+ [
1024
+ tempBuffer[octZ0 * octSize2 + octY1 * octSize + octX0],
1025
+ tempBuffer[octZ0 * octSize2 + octY1 * octSize + octX1],
1026
+ tempBuffer[octZ0 * octSize2 + octY1 * octSize + octX2],
1027
+ tempBuffer[octZ0 * octSize2 + octY1 * octSize + octX3]],
1028
+
1029
+ [
1030
+ tempBuffer[octZ0 * octSize2 + octY2 * octSize + octX0],
1031
+ tempBuffer[octZ0 * octSize2 + octY2 * octSize + octX1],
1032
+ tempBuffer[octZ0 * octSize2 + octY2 * octSize + octX2],
1033
+ tempBuffer[octZ0 * octSize2 + octY2 * octSize + octX3]],
1034
+
1035
+ [
1036
+ tempBuffer[octZ0 * octSize2 + octY3 * octSize + octX0],
1037
+ tempBuffer[octZ0 * octSize2 + octY3 * octSize + octX1],
1038
+ tempBuffer[octZ0 * octSize2 + octY3 * octSize + octX2],
1039
+ tempBuffer[octZ0 * octSize2 + octY3 * octSize + octX3]]],
1040
+
1041
+
1042
+
1043
+ [
1044
+ [
1045
+ tempBuffer[octZ1 * octSize2 + octY0 * octSize + octX0],
1046
+ tempBuffer[octZ1 * octSize2 + octY0 * octSize + octX1],
1047
+ tempBuffer[octZ1 * octSize2 + octY0 * octSize + octX2],
1048
+ tempBuffer[octZ1 * octSize2 + octY0 * octSize + octX3]],
1049
+
1050
+ [
1051
+ tempBuffer[octZ1 * octSize2 + octY1 * octSize + octX0],
1052
+ tempBuffer[octZ1 * octSize2 + octY1 * octSize + octX1],
1053
+ tempBuffer[octZ1 * octSize2 + octY1 * octSize + octX2],
1054
+ tempBuffer[octZ1 * octSize2 + octY1 * octSize + octX3]],
1055
+
1056
+ [
1057
+ tempBuffer[octZ1 * octSize2 + octY2 * octSize + octX0],
1058
+ tempBuffer[octZ1 * octSize2 + octY2 * octSize + octX1],
1059
+ tempBuffer[octZ1 * octSize2 + octY2 * octSize + octX2],
1060
+ tempBuffer[octZ1 * octSize2 + octY2 * octSize + octX3]],
1061
+
1062
+ [
1063
+ tempBuffer[octZ1 * octSize2 + octY3 * octSize + octX0],
1064
+ tempBuffer[octZ1 * octSize2 + octY3 * octSize + octX1],
1065
+ tempBuffer[octZ1 * octSize2 + octY3 * octSize + octX2],
1066
+ tempBuffer[octZ1 * octSize2 + octY3 * octSize + octX3]]],
1067
+
1068
+
1069
+
1070
+ [
1071
+ [
1072
+ tempBuffer[octZ2 * octSize2 + octY0 * octSize + octX0],
1073
+ tempBuffer[octZ2 * octSize2 + octY0 * octSize + octX1],
1074
+ tempBuffer[octZ2 * octSize2 + octY0 * octSize + octX2],
1075
+ tempBuffer[octZ2 * octSize2 + octY0 * octSize + octX3]],
1076
+
1077
+ [
1078
+ tempBuffer[octZ2 * octSize2 + octY1 * octSize + octX0],
1079
+ tempBuffer[octZ2 * octSize2 + octY1 * octSize + octX1],
1080
+ tempBuffer[octZ2 * octSize2 + octY1 * octSize + octX2],
1081
+ tempBuffer[octZ2 * octSize2 + octY1 * octSize + octX3]],
1082
+
1083
+ [
1084
+ tempBuffer[octZ2 * octSize2 + octY2 * octSize + octX0],
1085
+ tempBuffer[octZ2 * octSize2 + octY2 * octSize + octX1],
1086
+ tempBuffer[octZ2 * octSize2 + octY2 * octSize + octX2],
1087
+ tempBuffer[octZ2 * octSize2 + octY2 * octSize + octX3]],
1088
+
1089
+ [
1090
+ tempBuffer[octZ2 * octSize2 + octY3 * octSize + octX0],
1091
+ tempBuffer[octZ2 * octSize2 + octY3 * octSize + octX1],
1092
+ tempBuffer[octZ2 * octSize2 + octY3 * octSize + octX2],
1093
+ tempBuffer[octZ2 * octSize2 + octY3 * octSize + octX3]]],
1094
+
1095
+
1096
+
1097
+ [
1098
+ [
1099
+ tempBuffer[octZ3 * octSize2 + octY0 * octSize + octX0],
1100
+ tempBuffer[octZ3 * octSize2 + octY0 * octSize + octX1],
1101
+ tempBuffer[octZ3 * octSize2 + octY0 * octSize + octX2],
1102
+ tempBuffer[octZ3 * octSize2 + octY0 * octSize + octX3]],
1103
+
1104
+ [
1105
+ tempBuffer[octZ3 * octSize2 + octY1 * octSize + octX0],
1106
+ tempBuffer[octZ3 * octSize2 + octY1 * octSize + octX1],
1107
+ tempBuffer[octZ3 * octSize2 + octY1 * octSize + octX2],
1108
+ tempBuffer[octZ3 * octSize2 + octY1 * octSize + octX3]],
1109
+
1110
+ [
1111
+ tempBuffer[octZ3 * octSize2 + octY2 * octSize + octX0],
1112
+ tempBuffer[octZ3 * octSize2 + octY2 * octSize + octX1],
1113
+ tempBuffer[octZ3 * octSize2 + octY2 * octSize + octX2],
1114
+ tempBuffer[octZ3 * octSize2 + octY2 * octSize + octX3]],
1115
+
1116
+ [
1117
+ tempBuffer[octZ3 * octSize2 + octY3 * octSize + octX0],
1118
+ tempBuffer[octZ3 * octSize2 + octY3 * octSize + octX1],
1119
+ tempBuffer[octZ3 * octSize2 + octY3 * octSize + octX2],
1120
+ tempBuffer[octZ3 * octSize2 + octY3 * octSize + octX3]]]];
1121
+
1122
+
1123
+
1124
+
1125
+ for (var inZ = 0; inZ < step; ++inZ) {
1126
+ var interpZ = inZ / step;
1127
+ var imageZ = octZ * step + inZ;
1128
+
1129
+ var valuesP = //yx
1130
+ [
1131
+ [
1132
+ catmullRomv3_(values[0][0][0], values[1][0][0], values[2][0][0], values[3][0][0], interpZ),
1133
+ catmullRomv3_(values[0][0][1], values[1][0][1], values[2][0][1], values[3][0][1], interpZ),
1134
+ catmullRomv3_(values[0][0][2], values[1][0][2], values[2][0][2], values[3][0][2], interpZ),
1135
+ catmullRomv3_(values[0][0][3], values[1][0][3], values[2][0][3], values[3][0][3], interpZ)],
1136
+
1137
+ [
1138
+ catmullRomv3_(values[0][1][0], values[1][1][0], values[2][1][0], values[3][1][0], interpZ),
1139
+ catmullRomv3_(values[0][1][1], values[1][1][1], values[2][1][1], values[3][1][1], interpZ),
1140
+ catmullRomv3_(values[0][1][2], values[1][1][2], values[2][1][2], values[3][1][2], interpZ),
1141
+ catmullRomv3_(values[0][1][3], values[1][1][3], values[2][1][3], values[3][1][3], interpZ)],
1142
+
1143
+ [
1144
+ catmullRomv3_(values[0][2][0], values[1][2][0], values[2][2][0], values[3][2][0], interpZ),
1145
+ catmullRomv3_(values[0][2][1], values[1][2][1], values[2][2][1], values[3][2][1], interpZ),
1146
+ catmullRomv3_(values[0][2][2], values[1][2][2], values[2][2][2], values[3][2][2], interpZ),
1147
+ catmullRomv3_(values[0][2][3], values[1][2][3], values[2][2][3], values[3][2][3], interpZ)],
1148
+
1149
+ [
1150
+ catmullRomv3_(values[0][2][0], values[1][3][0], values[2][3][0], values[3][3][0], interpZ),
1151
+ catmullRomv3_(values[0][2][1], values[1][3][1], values[2][3][1], values[3][3][1], interpZ),
1152
+ catmullRomv3_(values[0][2][2], values[1][3][2], values[2][3][2], values[3][3][2], interpZ),
1153
+ catmullRomv3_(values[0][2][3], values[1][3][3], values[2][3][3], values[3][3][3], interpZ)]];
1154
+
1155
+
1156
+
1157
+ for (var inY = 0; inY < step; ++inY) {
1158
+ var interpY = inY / step;
1159
+ var imageY = octY * step + inY;
1160
+
1161
+ var value0 = catmullRomv3_(valuesP[0][0], valuesP[1][0], valuesP[2][0],
1162
+ valuesP[3][0], interpY);
1163
+ var value1 = catmullRomv3_(valuesP[0][1], valuesP[1][1], valuesP[2][1],
1164
+ valuesP[3][1], interpY);
1165
+ var value2 = catmullRomv3_(valuesP[0][2], valuesP[1][2], valuesP[2][2],
1166
+ valuesP[3][2], interpY);
1167
+ var value3 = catmullRomv3_(valuesP[0][3], valuesP[1][3], valuesP[2][3],
1168
+ valuesP[3][3], interpY);
1169
+
1170
+ for (var inX = 0; inX < step; ++inX) {
1171
+ var interpX = inX / step;
1172
+ var imageX = octX * step + inX;
1173
+
1174
+ var octResult = catmullRomv3_(value0, value1, value2, value3, interpX);
1175
+ var result = ctx.d(ctx.v(octResult, amp), image[imageZ][imageY][imageX]);
1176
+ var clampedResult = [
1177
+ clamp_(result[0], -1.0, 1.0),
1178
+ clamp_(result[1], -1.0, 1.0),
1179
+ clamp_(result[2], -1.0, 1.0)];
1180
+
1181
+
1182
+ image[imageZ][imageY][imageX] = clampedResult;
1183
+ }
1184
+ }
1185
+ }
1186
+ }
1187
+
1188
+ mixStepIteration++;
1189
+ this.progress = Progress.INIT + (Progress.MIX - Progress.INIT) * (mixStepIteration / numMixStepIterations);
1190
+
1191
+ octY++;
1192
+ if (octY >= octSize) {
1193
+ octY = 0;
1194
+ octZ++;
1195
+ if (octZ >= octSize) {
1196
+ octZ = 0;
1197
+
1198
+ prevStep = step;
1199
+ amp = Math.pow(amp, fadeDegree);
1200
+
1201
+ if (prevStep <= 1) {
1202
+ state = States.SCALING;
1203
+ this.progress = Progress.MIX;
1204
+ } else {
1205
+ state = States.MIX_STEP_INIT;
1206
+ }
1207
+ }
1208
+ }
1209
+ };
1210
+
1211
+ // hardcoded scaling of the image to make it more symethric
1212
+ var scaling = function scaling() {
1213
+ var low = [-1.0, -1.0, -1.0];
1214
+ var high = [0.5, 0.7, 1.0];
1215
+
1216
+ for (var z = 0; z < imageSize; ++z) {
1217
+ var imageZ = image[z];
1218
+
1219
+ for (var y = 0; y < imageSize; ++y) {
1220
+ var imageZY = imageZ[y];
1221
+
1222
+ for (var x = 0; x < imageSize; ++x) {
1223
+ var imageZYX = imageZY[x];
1224
+ imageZYX[0] = ctx.X(low[0], high[0], imageZYX[0] * 0.5 + 0.5);
1225
+ imageZYX[1] = ctx.X(low[1], high[1], imageZYX[1] * 0.5 + 0.5);
1226
+ imageZYX[2] = ctx.X(low[2], high[2], imageZYX[2] * 0.5 + 0.5);
1227
+ }
1228
+ }
1229
+ }
1230
+
1231
+ state = States.DATA_VIEWS;
1232
+ this.progress = Progress.SCALING;
1233
+ };
1234
+
1235
+ // filling zd DataViews
1236
+ var dataViews = function dataViews() {
1237
+ ctx.yd = imageSize;
1238
+ ctx.zd = [];
1239
+
1240
+ for (var z = 0; z < imageSize; ++z) {
1241
+ var imageZ = image[z];
1242
+
1243
+ var plane = new ArrayBuffer(imageSize * imageSize * 3);
1244
+ var view = new DataView(plane);
1245
+
1246
+ for (var y = 0; y < imageSize; ++y) {
1247
+ var imageZY = imageZ[y];
1248
+
1249
+ for (var x = 0; x < imageSize; ++x) {
1250
+ var imageZYX = imageZY[x];
1251
+
1252
+ var rgbOffset = (y * imageSize + x) * 3;
1253
+ view.setUint8(rgbOffset + 0,
1254
+ Math.floor(clamp_(256.0 * (imageZYX[0] * 0.5 + 0.5) - 0.5, 0.0, 255.0)));
1255
+ view.setUint8(rgbOffset + 1,
1256
+ Math.floor(clamp_(256.0 * (imageZYX[1] * 0.5 + 0.5) - 0.5, 0.0, 255.0)));
1257
+ view.setUint8(rgbOffset + 2,
1258
+ Math.floor(clamp_(256.0 * (imageZYX[2] * 0.5 + 0.5) - 0.5, 0.0, 255.0)));
1259
+ }
1260
+ }
1261
+
1262
+ ctx.zd[z] = view;
1263
+ }
1264
+
1265
+ state = States.FINISHED;
1266
+ this.progress = Progress.DATA_VIEWS;
1267
+ };
1268
+
1269
+ this.step = function () {
1270
+ switch (state) {
1271
+ case States.INITIAL_FILL:initialFill.call(this);break;
1272
+ case States.MIX_STEP_INIT:mixStepInit.call(this);break;
1273
+ case States.MIX_STEP_PROCESS:mixStepProcess.call(this);break;
1274
+ case States.SCALING:scaling.call(this);break;
1275
+ case States.DATA_VIEWS:dataViews.call(this);break;
1276
+ }
1277
+
1278
+ return state == States.FINISHED;
1279
+ };
1280
+ };
1281
+
1282
+ // Lazy-create offscreen canvas only if DOM available (allows Node.js tests)
1283
+ if (typeof document !== 'undefined' && document.createElement) {
1284
+ this.cf = document.createElement('canvas');
1285
+ this.cf.width = 0;
1286
+ this.cf.height = 0;
1287
+ this.bf = this.cf.getContext('2d');
1288
+ } else {
1289
+ this.cf = { width: 0, height: 0 };
1290
+ this.bf = null;
1291
+ }
1292
+
1293
+ this.af = function (minWidth, minHeight) {
1294
+ if (this.cf.width < minWidth || this.cf.height < minHeight) {
1295
+ this.cf.width = minWidth;
1296
+ this.cf.height = minHeight;
1297
+ this.bf = this.cf.getContext('2d');
1298
+ }
1299
+ };
1300
+
1301
+ this.effects = [];
1302
+
1303
+ this.loadEffect = function (effectFilePath, onSuccessFunc, onFailFunc) {
1304
+
1305
+ if (this.effects[effectFilePath] != undefined) {
1306
+
1307
+ var effectModel = this.effects[effectFilePath];
1308
+
1309
+ if (effectModel instanceof Array) {
1310
+ effectModel[effectModel.length] = [onSuccessFunc, onFailFunc];
1311
+ return;
1312
+ }
1313
+
1314
+ onSuccessFunc(effectModel);
1315
+ return;
1316
+ }
1317
+
1318
+ this.effects[effectFilePath] = [[onSuccessFunc, onFailFunc]];
1319
+
1320
+ var request = new XMLHttpRequest();
1321
+ request.open("GET", effectFilePath, true);
1322
+ request.responseType = "text";
1323
+ request.ctx = this;
1324
+ request.onreadystatechange = function () {
1325
+ if (request.readyState == 4) {
1326
+ var callbacks = this.ctx.effects[effectFilePath];
1327
+
1328
+ if (request.status >= 200 && request.status < 300 || request.status == 304) {
1329
+
1330
+ var evalText = "(function(ctx) {\n" +
1331
+ request.responseText +
1332
+ "\nreturn new NeutrinoEffect(ctx);\n})(this.ctx);";
1333
+ var effectModel = eval(evalText);
1334
+ this.ctx.effects[effectFilePath] = effectModel;
1335
+
1336
+ callbacks.forEach(function (callback) {
1337
+ callback[0](effectModel);
1338
+ });
1339
+
1340
+ } else {
1341
+ callbacks.forEach(function (callback) {
1342
+ callback[1]();
1343
+ });
1344
+ }
1345
+ }
1346
+ };
1347
+
1348
+ request.send();
1349
+ };
1350
+
1351
+ this.removeEffect = function (effectFilePath) {
1352
+ delete this.effects[effectFilePath];
1353
+ };
1354
+ }
1355
+
1356
+ exports.Context = Context;
1357
+
1358
+ Object.defineProperty(exports, '__esModule', { value: true });
1359
+
1360
+ })));
1361
+ //# sourceMappingURL=neutrinoparticles.js-v1.0.umd.js.map