@neutrinoparticles/js-v1.1 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,1350 @@
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.vf = function (r, s, a) {
86
+ r[0] = s - a[0];
87
+ r[1] = s - a[1];
88
+ };
89
+
90
+ this.wf = 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.zf = 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.Af = 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
+ ctx.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
+ // Expression-layer quat helpers (return-value style; see ExpressionConverter).
603
+ this.mulq_ = function (a, b) {
604
+ var r = [];
605
+ ctx.sb(r, a, b);
606
+ return r;
607
+ };
608
+
609
+ this.inverseq_ = function (q) {
610
+ var d = q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3];
611
+ return [-q[0] / d, -q[1] / d, -q[2] / d, q[3] / d];
612
+ };
613
+
614
+ // quat(w, x, y, z) -> [x, y, z, w] (mirrors CS _math.quat_ signature).
615
+ this.quat_ = function (w, x, y, z) {
616
+ return [x, y, z, w];
617
+ };
618
+
619
+ this.tb = function (r, Pf, degree, scale, v) {
620
+ var rad = ctx.ib(degree);
621
+ var cos = Math.cos(rad) * scale;
622
+ var sin = Math.sin(rad) * scale;
623
+ r[0] = Pf[0] + cos * v[0] - sin * v[1];
624
+ r[1] = Pf[1] + sin * v[0] + cos * v[1];
625
+ };
626
+
627
+ this.ub = function (r, Pf, degree, scale, v) {
628
+ var rad = ctx.ib(degree);
629
+ var cos = Math.cos(rad) / scale;
630
+ var sin = Math.sin(rad) / scale;
631
+
632
+ r[0] = cos * v[0] + sin * v[1] - Pf[0] * cos - Pf[1] * sin;
633
+ r[1] = cos * v[1] - sin * v[0] + Pf[0] * sin - Pf[1] * cos;
634
+ };
635
+
636
+ this.vb = function (val) {
637
+ if (val < 0)
638
+ return Math.floor(ctx.yd - 1 + val % ctx.yd);else
639
+
640
+ return Math.floor(val % ctx.yd);
641
+ };
642
+
643
+ function colorCompToHex_(c) {
644
+ return c < 16 ? "0" + c.toString(16) : c.toString(16);
645
+ }
646
+
647
+ this.nf = function (rgb) {
648
+ return "#" +
649
+ colorCompToHex_(Math.floor(rgb[0] * 255)) +
650
+ colorCompToHex_(Math.floor(rgb[1] * 255)) +
651
+ colorCompToHex_(Math.floor(rgb[2] * 255));
652
+ };
653
+
654
+ this.Bf = function (Df, Ff, Gf, a, b, Hf) {
655
+ var ca = ctx.f(a, Df);
656
+ var cb = ctx.f(b, Df);
657
+
658
+ var Ef = ctx.r(Ff, Gf);
659
+
660
+ if (ca[0] < -Ef[0] && cb[0] < -Ef[0] ||
661
+ ca[0] > Ef[0] && cb[0] > Ef[0] ||
662
+ ca[1] < -Ef[1] && cb[1] < -Ef[1] ||
663
+ ca[1] > Ef[1] && cb[1] > Ef[1])
664
+ {
665
+ return false;
666
+ }
667
+
668
+ if (ca[0] <= Ef[0] && ca[0] >= -Ef[0] && ca[1] <= Ef[1] && ca[1] >= -Ef[1])
669
+ return true;
670
+
671
+ if (Hf < 0.000001)
672
+ return false;
673
+
674
+ if (cb[0] <= Ef[0] && cb[0] >= -Ef[0] && cb[1] <= Ef[1] && cb[1] >= -Ef[1])
675
+ return true;
676
+
677
+ var If = ctx.f(b, a);ctx.s(If, If, Hf);
678
+ var Jf = [-If[1], If[0]];
679
+ var Kf = Math.abs(ctx.G(Jf, cb));
680
+
681
+ if (Math.abs(ctx.G(Jf, Ef)) >= Kf) {
682
+ var Lf = [-Ff[1], Ff[0]];
683
+ if (ctx.G(Lf, ca) * ctx.G(Lf, cb) <= 0.0) {
684
+ return true;
685
+ }
686
+ } else if (Math.abs(ctx.G(Jf, [Ef[0], -Ef[1]])) >= Kf) {
687
+ var _Lf = [Ff[1], Ff[0]];
688
+ if (ctx.G(_Lf, ca) * ctx.G(_Lf, cb) <= 0.0) {
689
+ return true;
690
+ }
691
+ }
692
+
693
+ return false;
694
+ };
695
+
696
+ this.Cf = function (Df, Ff, Gf, a, b, Hf, Mf) {
697
+ var ca = ctx.f(a, Df);
698
+ var cb = ctx.f(b, Df);
699
+
700
+ var Ef = ctx.r(Ff, Gf);
701
+
702
+ if (Hf < 0.000001)
703
+ return false;
704
+
705
+ if (ca[0] < -Ef[0] && cb[0] < -Ef[0] ||
706
+ ca[0] > Ef[0] && cb[0] > Ef[0] ||
707
+ ca[1] < -Ef[1] && cb[1] < -Ef[1] ||
708
+ ca[1] > Ef[1] && cb[1] > Ef[1])
709
+ {
710
+ return false;
711
+ }
712
+
713
+ var If = ctx.f(b, a);ctx.s(If, If, Hf);
714
+ var Jf = [-If[1], If[0]];
715
+ var Kf = Math.abs(ctx.G(Jf, cb));
716
+
717
+ if (Mf) {
718
+ if (Math.abs(ctx.G(Jf, Ef)) >= Kf) {
719
+ var Lf = [-Ff[1], Ff[0]];
720
+ if (ctx.G(Lf, ca) * ctx.G(Lf, cb) <= 0.0) {
721
+ return true;
722
+ }
723
+ }
724
+ } else {
725
+ if (Math.abs(ctx.G(Jf, [Ef[0], -Ef[1]])) >= Kf) {
726
+ var _Lf2 = [Ff[1], Ff[0]];
727
+ if (ctx.G(_Lf2, ca) * ctx.G(_Lf2, cb) <= 0.0) {
728
+ return true;
729
+ }
730
+ }
731
+ }
732
+
733
+ return false;
734
+ };
735
+
736
+ this.wb = function (r, x, y, z) {
737
+ var rgbDisp = 3 * (y * ctx.yd + x);
738
+ var view = ctx.zd[z];
739
+
740
+ r[0] = view.getUint8(rgbDisp);
741
+ r[1] = view.getUint8(rgbDisp + 1);
742
+ r[2] = view.getUint8(rgbDisp + 2);
743
+ };
744
+
745
+ this.xb = function (r, Pf) {
746
+ if (ctx.zd == null) {
747
+ ctx.W(r, 128, 128, 128);
748
+ return;
749
+ }
750
+
751
+ var scaledPosX = Pf[0] * ctx.yd;
752
+ var scaledPosY = Pf[1] * ctx.yd;
753
+ var scaledPosZ = Pf[2] * ctx.yd;
754
+
755
+ var floorX = Math.floor(scaledPosX);
756
+ var floorY = Math.floor(scaledPosY);
757
+ var floorZ = Math.floor(scaledPosZ);
758
+
759
+ var fracX = scaledPosX - floorX;
760
+ var fracY = scaledPosY - floorY;
761
+ var fracZ = scaledPosZ - floorZ;
762
+
763
+ var noiseX = ctx.vb(floorX);
764
+ var noiseX1 = ctx.vb(floorX + 1);
765
+ var noiseY = ctx.vb(floorY);
766
+ var noiseY1 = ctx.vb(floorY + 1);
767
+ var noiseZ = ctx.vb(floorZ);
768
+ var noiseZ1 = ctx.vb(floorZ + 1);
769
+
770
+ var value000 = [],value001 = [],value010 = [],value011 = [],
771
+ value100 = [],value101 = [],value110 = [],value111 = [];
772
+
773
+ ctx.wb(value000, noiseX, noiseY, noiseZ);
774
+ ctx.wb(value001, noiseX, noiseY, noiseZ1);
775
+ ctx.wb(value010, noiseX, noiseY1, noiseZ);
776
+ ctx.wb(value011, noiseX, noiseY1, noiseZ1);
777
+ ctx.wb(value100, noiseX1, noiseY, noiseZ);
778
+ ctx.wb(value101, noiseX1, noiseY, noiseZ1);
779
+ ctx.wb(value110, noiseX1, noiseY1, noiseZ);
780
+ ctx.wb(value111, noiseX1, noiseY1, noiseZ1);
781
+
782
+ var value00 = [],value01 = [],value10 = [],value11 = [];
783
+ ctx.ab(value00, value000, value001, fracZ);
784
+ ctx.ab(value01, value010, value011, fracZ);
785
+ ctx.ab(value10, value100, value101, fracZ);
786
+ ctx.ab(value11, value110, value111, fracZ);
787
+
788
+ var value0 = [],value1 = [];
789
+ ctx.ab(value0, value00, value01, fracY);
790
+ ctx.ab(value1, value10, value11, fracY);
791
+
792
+ ctx.ab(r, value0, value1, fracX);
793
+ };
794
+
795
+ this.ImageDesc = function (image, x, y, width, height) {
796
+ this.image = image;
797
+ this.x = x;
798
+ this.y = y;
799
+ this.width = width;
800
+ this.height = height;
801
+ };
802
+
803
+ this.RenderCall = function (startIndex, numIndices, renderStyleIndex) {
804
+ this.startIndex = startIndex;
805
+ this.numIndices = numIndices;
806
+ this.renderStyleIndex = renderStyleIndex;
807
+ };
808
+
809
+ this.SubRect = function (x, y, width, height) {
810
+ this.x = x;
811
+ this.y = y;
812
+ this.width = width;
813
+ this.height = height;
814
+ };
815
+
816
+ this.Camera2D = function () {
817
+ };
818
+
819
+ this.Camera2D.prototype.tb = function (Pf, Nd) {
820
+ return true;
821
+ };
822
+
823
+ this.Camera3D = function (/**/screenSize, /**/horizAngle) {
824
+ this.Qd = ctx.r(/**/screenSize, 0.5);
825
+ this.z = -(/**/screenSize[0] * 0.5) / Math.tan(ctx.ib(/**/horizAngle * 0.5));
826
+ };
827
+
828
+ this.Camera3D.prototype. /**/transform = function (/**/pos, /**/size) {
829
+ if (/**/pos[2] < this.z)
830
+ return false;
831
+
832
+ var scale = -this.z / (/**/pos[2] - this.z);
833
+ ctx.a(/**/pos, ctx.r(ctx.f(/**/pos, this.Qd), scale), this.Qd);
834
+ ctx.q(/**/size, /**/size, scale);
835
+
836
+ return true;
837
+ };
838
+
839
+ this.zd = null;
840
+ this.yd = 0;
841
+
842
+ this.initializeNoise = function (path, onloadcallback, onfailcallback) {
843
+
844
+ if (!path) {
845
+ alert("path should be defined");
846
+ }
847
+
848
+ if (this.zd != null) {
849
+ onloadcallback();
850
+ return;
851
+ }
852
+
853
+ if (path == null || path == undefined)
854
+ path = this.defaultPath;
855
+
856
+ var request = new XMLHttpRequest();
857
+ request.open("GET", path + "neutrinoparticles.noise.bin", true);
858
+ request.responseType = "arraybuffer";
859
+ request.ctx = this;
860
+ request.onreadystatechange = function () {
861
+ if (request.readyState == 4) {
862
+ if (request.status >= 200 && request.status < 300 || request.status == 304) {
863
+ var zd = request.response;
864
+ var ctx = request.ctx;
865
+
866
+ var view = new DataView(zd, 0, 4);
867
+ var planeSize = view.getUint32(0, true);
868
+
869
+ ctx.zd = [];
870
+ ctx.yd = planeSize;
871
+
872
+ for (var planeIndex = 0; planeIndex < planeSize; ++planeIndex) {
873
+ ctx.zd[planeIndex] = new DataView(zd,
874
+ 4 /*size*/ + 3 * planeSize * planeSize * planeIndex);
875
+ }
876
+
877
+ if (onloadcallback)
878
+ onloadcallback();
879
+ } else {
880
+ if (onfailcallback)
881
+ onfailcallback();
882
+ }
883
+ }
884
+ };
885
+
886
+ request.send();
887
+ };
888
+
889
+ this.NoiseGenerator = function () {
890
+
891
+ var catmullRom_ = function catmullRom_(p0, p1, p2, p3, t) {
892
+ return 0.5 * (2.0 * p1 + (-p0 + p2) * t + (2.0 * p0 - 5.0 * p1 + 4.0 * p2 - p3) * t * t +
893
+ (-p0 + 3.0 * p1 - 3.0 * p2 + p3) * (t * t * t));
894
+ };
895
+
896
+ var catmullRomv3_ = function catmullRomv3_(p0, p1, p2, p3, t) {
897
+ return [
898
+ catmullRom_(p0[0], p1[0], p2[0], p3[0], t),
899
+ catmullRom_(p0[1], p1[1], p2[1], p3[1], t),
900
+ catmullRom_(p0[2], p1[2], p2[2], p3[2], t)];
901
+
902
+ };
903
+
904
+ var clamp_ = function clamp_(a, from, to) {
905
+ return a < from ? from : a > to ? to : a;
906
+ };
907
+
908
+ var imageSize = 64;
909
+ var image = [];
910
+ var tempBuffer = [];
911
+ var tausGenerator = new ctx.taus88(120); // 120 - hardcoded starting seed
912
+ var rand = function rand() {return tausGenerator.rand();};
913
+ var amp = 0.7; // hardcoded amplitude of perlin noise
914
+ var fadeDegree = 1.2; // hardcoded fade degree of each octave
915
+ var prevStep = imageSize;
916
+
917
+ var step, Nd, octSize, octSize2, octMaskSize, octPixels, octZ, octY; // mix step variables
918
+
919
+ var numMixStepIterations = 0;
920
+ var mixStepIteration = 0;
921
+
922
+ for (var i = prevStep >>> 1; i > 0; i >>>= 1) {
923
+ var _octSize = Math.floor(imageSize / i);
924
+ numMixStepIterations += _octSize * _octSize;
925
+ }
926
+
927
+ var States = {
928
+ INITIAL_FILL: 0,
929
+ MIX_STEP_INIT: 1,
930
+ MIX_STEP_PROCESS: 2,
931
+ SCALING: 3,
932
+ DATA_VIEWS: 4,
933
+ FINISHED: 5
934
+ };
935
+
936
+ var Progress = {
937
+ INIT: 0.01,
938
+ MIX: 0.9,
939
+ SCALING: 0.95,
940
+ DATA_VIEWS: 1.0
941
+ };
942
+
943
+ var state = States.INITIAL_FILL;
944
+
945
+ this.progress = 0.0;
946
+
947
+ var initialFill = function initialFill() {
948
+ for (var z = 0; z < imageSize; ++z) {
949
+ var imageZ = image[z] = [];
950
+
951
+ for (var y = 0; y < imageSize; ++y) {
952
+ var imageZY = imageZ[y] = [];
953
+
954
+ for (var x = 0; x < imageSize; ++x) {
955
+ var imageZYX = imageZY[x] = [0.0, 0.0, 0.0];
956
+ }
957
+ }
958
+ }
959
+
960
+ state = States.MIX_STEP_INIT;
961
+ this.progress = Progress.INIT;
962
+ };
963
+
964
+ var mixStepInit = function mixStepInit() {
965
+
966
+ step = prevStep >>> 1;
967
+ Nd = imageSize;
968
+ octSize = Math.floor(Nd / step);
969
+ octSize2 = octSize * octSize;
970
+ octMaskSize = Math.max(octSize - 1, 1);
971
+ octPixels = octSize * octSize * octSize;
972
+ octZ = 0;
973
+ octY = 0;
974
+
975
+ for (var i = 0; i < octPixels; ++i) {
976
+ tempBuffer[i] = [];
977
+ // order is inverted to satisfy c++ obsolete order
978
+ tempBuffer[i][2] = rand() * 2.0 - 1.0;
979
+ tempBuffer[i][1] = rand() * 2.0 - 1.0;
980
+ tempBuffer[i][0] = rand() * 2.0 - 1.0;
981
+ }
982
+
983
+ state = States.MIX_STEP_PROCESS;
984
+ };
985
+
986
+ var mixStepProcess = function mixStepProcess() {
987
+ for (var octX = 0; octX < octSize; ++octX) {
988
+ var octZ0 = octZ - 1 >>> 0 & octMaskSize;
989
+ var octZ1 = octZ >>> 0 & octMaskSize;
990
+ var octZ2 = octZ + 1 >>> 0 & octMaskSize;
991
+ var octZ3 = octZ + 2 >>> 0 & octMaskSize;
992
+
993
+ var octY0 = octY - 1 >>> 0 & octMaskSize;
994
+ var octY1 = octY >>> 0 & octMaskSize;
995
+ var octY2 = octY + 1 >>> 0 & octMaskSize;
996
+ var octY3 = octY + 2 >>> 0 & octMaskSize;
997
+
998
+ var octX0 = octX - 1 >>> 0 & octMaskSize;
999
+ var octX1 = octX >>> 0 & octMaskSize;
1000
+ var octX2 = octX + 1 >>> 0 & octMaskSize;
1001
+ var octX3 = octX + 2 >>> 0 & octMaskSize;
1002
+
1003
+ var values = //zyx
1004
+ [
1005
+ [
1006
+ [
1007
+ tempBuffer[octZ0 * octSize2 + octY0 * octSize + octX0],
1008
+ tempBuffer[octZ0 * octSize2 + octY0 * octSize + octX1],
1009
+ tempBuffer[octZ0 * octSize2 + octY0 * octSize + octX2],
1010
+ tempBuffer[octZ0 * octSize2 + octY0 * octSize + octX3]],
1011
+
1012
+ [
1013
+ tempBuffer[octZ0 * octSize2 + octY1 * octSize + octX0],
1014
+ tempBuffer[octZ0 * octSize2 + octY1 * octSize + octX1],
1015
+ tempBuffer[octZ0 * octSize2 + octY1 * octSize + octX2],
1016
+ tempBuffer[octZ0 * octSize2 + octY1 * octSize + octX3]],
1017
+
1018
+ [
1019
+ tempBuffer[octZ0 * octSize2 + octY2 * octSize + octX0],
1020
+ tempBuffer[octZ0 * octSize2 + octY2 * octSize + octX1],
1021
+ tempBuffer[octZ0 * octSize2 + octY2 * octSize + octX2],
1022
+ tempBuffer[octZ0 * octSize2 + octY2 * octSize + octX3]],
1023
+
1024
+ [
1025
+ tempBuffer[octZ0 * octSize2 + octY3 * octSize + octX0],
1026
+ tempBuffer[octZ0 * octSize2 + octY3 * octSize + octX1],
1027
+ tempBuffer[octZ0 * octSize2 + octY3 * octSize + octX2],
1028
+ tempBuffer[octZ0 * octSize2 + octY3 * octSize + octX3]]],
1029
+
1030
+
1031
+
1032
+ [
1033
+ [
1034
+ tempBuffer[octZ1 * octSize2 + octY0 * octSize + octX0],
1035
+ tempBuffer[octZ1 * octSize2 + octY0 * octSize + octX1],
1036
+ tempBuffer[octZ1 * octSize2 + octY0 * octSize + octX2],
1037
+ tempBuffer[octZ1 * octSize2 + octY0 * octSize + octX3]],
1038
+
1039
+ [
1040
+ tempBuffer[octZ1 * octSize2 + octY1 * octSize + octX0],
1041
+ tempBuffer[octZ1 * octSize2 + octY1 * octSize + octX1],
1042
+ tempBuffer[octZ1 * octSize2 + octY1 * octSize + octX2],
1043
+ tempBuffer[octZ1 * octSize2 + octY1 * octSize + octX3]],
1044
+
1045
+ [
1046
+ tempBuffer[octZ1 * octSize2 + octY2 * octSize + octX0],
1047
+ tempBuffer[octZ1 * octSize2 + octY2 * octSize + octX1],
1048
+ tempBuffer[octZ1 * octSize2 + octY2 * octSize + octX2],
1049
+ tempBuffer[octZ1 * octSize2 + octY2 * octSize + octX3]],
1050
+
1051
+ [
1052
+ tempBuffer[octZ1 * octSize2 + octY3 * octSize + octX0],
1053
+ tempBuffer[octZ1 * octSize2 + octY3 * octSize + octX1],
1054
+ tempBuffer[octZ1 * octSize2 + octY3 * octSize + octX2],
1055
+ tempBuffer[octZ1 * octSize2 + octY3 * octSize + octX3]]],
1056
+
1057
+
1058
+
1059
+ [
1060
+ [
1061
+ tempBuffer[octZ2 * octSize2 + octY0 * octSize + octX0],
1062
+ tempBuffer[octZ2 * octSize2 + octY0 * octSize + octX1],
1063
+ tempBuffer[octZ2 * octSize2 + octY0 * octSize + octX2],
1064
+ tempBuffer[octZ2 * octSize2 + octY0 * octSize + octX3]],
1065
+
1066
+ [
1067
+ tempBuffer[octZ2 * octSize2 + octY1 * octSize + octX0],
1068
+ tempBuffer[octZ2 * octSize2 + octY1 * octSize + octX1],
1069
+ tempBuffer[octZ2 * octSize2 + octY1 * octSize + octX2],
1070
+ tempBuffer[octZ2 * octSize2 + octY1 * octSize + octX3]],
1071
+
1072
+ [
1073
+ tempBuffer[octZ2 * octSize2 + octY2 * octSize + octX0],
1074
+ tempBuffer[octZ2 * octSize2 + octY2 * octSize + octX1],
1075
+ tempBuffer[octZ2 * octSize2 + octY2 * octSize + octX2],
1076
+ tempBuffer[octZ2 * octSize2 + octY2 * octSize + octX3]],
1077
+
1078
+ [
1079
+ tempBuffer[octZ2 * octSize2 + octY3 * octSize + octX0],
1080
+ tempBuffer[octZ2 * octSize2 + octY3 * octSize + octX1],
1081
+ tempBuffer[octZ2 * octSize2 + octY3 * octSize + octX2],
1082
+ tempBuffer[octZ2 * octSize2 + octY3 * octSize + octX3]]],
1083
+
1084
+
1085
+
1086
+ [
1087
+ [
1088
+ tempBuffer[octZ3 * octSize2 + octY0 * octSize + octX0],
1089
+ tempBuffer[octZ3 * octSize2 + octY0 * octSize + octX1],
1090
+ tempBuffer[octZ3 * octSize2 + octY0 * octSize + octX2],
1091
+ tempBuffer[octZ3 * octSize2 + octY0 * octSize + octX3]],
1092
+
1093
+ [
1094
+ tempBuffer[octZ3 * octSize2 + octY1 * octSize + octX0],
1095
+ tempBuffer[octZ3 * octSize2 + octY1 * octSize + octX1],
1096
+ tempBuffer[octZ3 * octSize2 + octY1 * octSize + octX2],
1097
+ tempBuffer[octZ3 * octSize2 + octY1 * octSize + octX3]],
1098
+
1099
+ [
1100
+ tempBuffer[octZ3 * octSize2 + octY2 * octSize + octX0],
1101
+ tempBuffer[octZ3 * octSize2 + octY2 * octSize + octX1],
1102
+ tempBuffer[octZ3 * octSize2 + octY2 * octSize + octX2],
1103
+ tempBuffer[octZ3 * octSize2 + octY2 * octSize + octX3]],
1104
+
1105
+ [
1106
+ tempBuffer[octZ3 * octSize2 + octY3 * octSize + octX0],
1107
+ tempBuffer[octZ3 * octSize2 + octY3 * octSize + octX1],
1108
+ tempBuffer[octZ3 * octSize2 + octY3 * octSize + octX2],
1109
+ tempBuffer[octZ3 * octSize2 + octY3 * octSize + octX3]]]];
1110
+
1111
+
1112
+
1113
+
1114
+ for (var inZ = 0; inZ < step; ++inZ) {
1115
+ var interpZ = inZ / step;
1116
+ var imageZ = octZ * step + inZ;
1117
+
1118
+ var valuesP = //yx
1119
+ [
1120
+ [
1121
+ catmullRomv3_(values[0][0][0], values[1][0][0], values[2][0][0], values[3][0][0], interpZ),
1122
+ catmullRomv3_(values[0][0][1], values[1][0][1], values[2][0][1], values[3][0][1], interpZ),
1123
+ catmullRomv3_(values[0][0][2], values[1][0][2], values[2][0][2], values[3][0][2], interpZ),
1124
+ catmullRomv3_(values[0][0][3], values[1][0][3], values[2][0][3], values[3][0][3], interpZ)],
1125
+
1126
+ [
1127
+ catmullRomv3_(values[0][1][0], values[1][1][0], values[2][1][0], values[3][1][0], interpZ),
1128
+ catmullRomv3_(values[0][1][1], values[1][1][1], values[2][1][1], values[3][1][1], interpZ),
1129
+ catmullRomv3_(values[0][1][2], values[1][1][2], values[2][1][2], values[3][1][2], interpZ),
1130
+ catmullRomv3_(values[0][1][3], values[1][1][3], values[2][1][3], values[3][1][3], interpZ)],
1131
+
1132
+ [
1133
+ catmullRomv3_(values[0][2][0], values[1][2][0], values[2][2][0], values[3][2][0], interpZ),
1134
+ catmullRomv3_(values[0][2][1], values[1][2][1], values[2][2][1], values[3][2][1], interpZ),
1135
+ catmullRomv3_(values[0][2][2], values[1][2][2], values[2][2][2], values[3][2][2], interpZ),
1136
+ catmullRomv3_(values[0][2][3], values[1][2][3], values[2][2][3], values[3][2][3], interpZ)],
1137
+
1138
+ [
1139
+ catmullRomv3_(values[0][2][0], values[1][3][0], values[2][3][0], values[3][3][0], interpZ),
1140
+ catmullRomv3_(values[0][2][1], values[1][3][1], values[2][3][1], values[3][3][1], interpZ),
1141
+ catmullRomv3_(values[0][2][2], values[1][3][2], values[2][3][2], values[3][3][2], interpZ),
1142
+ catmullRomv3_(values[0][2][3], values[1][3][3], values[2][3][3], values[3][3][3], interpZ)]];
1143
+
1144
+
1145
+
1146
+ for (var inY = 0; inY < step; ++inY) {
1147
+ var interpY = inY / step;
1148
+ var imageY = octY * step + inY;
1149
+
1150
+ var value0 = catmullRomv3_(valuesP[0][0], valuesP[1][0], valuesP[2][0],
1151
+ valuesP[3][0], interpY);
1152
+ var value1 = catmullRomv3_(valuesP[0][1], valuesP[1][1], valuesP[2][1],
1153
+ valuesP[3][1], interpY);
1154
+ var value2 = catmullRomv3_(valuesP[0][2], valuesP[1][2], valuesP[2][2],
1155
+ valuesP[3][2], interpY);
1156
+ var value3 = catmullRomv3_(valuesP[0][3], valuesP[1][3], valuesP[2][3],
1157
+ valuesP[3][3], interpY);
1158
+
1159
+ for (var inX = 0; inX < step; ++inX) {
1160
+ var interpX = inX / step;
1161
+ var imageX = octX * step + inX;
1162
+
1163
+ var octResult = catmullRomv3_(value0, value1, value2, value3, interpX);
1164
+ var result = ctx.d(ctx.v(octResult, amp), image[imageZ][imageY][imageX]);
1165
+ var clampedResult = [
1166
+ clamp_(result[0], -1.0, 1.0),
1167
+ clamp_(result[1], -1.0, 1.0),
1168
+ clamp_(result[2], -1.0, 1.0)];
1169
+
1170
+
1171
+ image[imageZ][imageY][imageX] = clampedResult;
1172
+ }
1173
+ }
1174
+ }
1175
+ }
1176
+
1177
+ mixStepIteration++;
1178
+ this.progress = Progress.INIT + (Progress.MIX - Progress.INIT) * (mixStepIteration / numMixStepIterations);
1179
+
1180
+ octY++;
1181
+ if (octY >= octSize) {
1182
+ octY = 0;
1183
+ octZ++;
1184
+ if (octZ >= octSize) {
1185
+ octZ = 0;
1186
+
1187
+ prevStep = step;
1188
+ amp = Math.pow(amp, fadeDegree);
1189
+
1190
+ if (prevStep <= 1) {
1191
+ state = States.SCALING;
1192
+ this.progress = Progress.MIX;
1193
+ } else {
1194
+ state = States.MIX_STEP_INIT;
1195
+ }
1196
+ }
1197
+ }
1198
+ };
1199
+
1200
+ // hardcoded scaling of the image to make it more symethric
1201
+ var scaling = function scaling() {
1202
+ var low = [-1.0, -1.0, -1.0];
1203
+ var high = [0.5, 0.7, 1.0];
1204
+
1205
+ for (var z = 0; z < imageSize; ++z) {
1206
+ var imageZ = image[z];
1207
+
1208
+ for (var y = 0; y < imageSize; ++y) {
1209
+ var imageZY = imageZ[y];
1210
+
1211
+ for (var x = 0; x < imageSize; ++x) {
1212
+ var imageZYX = imageZY[x];
1213
+ imageZYX[0] = ctx.X(low[0], high[0], imageZYX[0] * 0.5 + 0.5);
1214
+ imageZYX[1] = ctx.X(low[1], high[1], imageZYX[1] * 0.5 + 0.5);
1215
+ imageZYX[2] = ctx.X(low[2], high[2], imageZYX[2] * 0.5 + 0.5);
1216
+ }
1217
+ }
1218
+ }
1219
+
1220
+ state = States.DATA_VIEWS;
1221
+ this.progress = Progress.SCALING;
1222
+ };
1223
+
1224
+ // filling noise DataViews
1225
+ var dataViews = function dataViews() {
1226
+ ctx.yd = imageSize;
1227
+ ctx.zd = [];
1228
+
1229
+ for (var z = 0; z < imageSize; ++z) {
1230
+ var imageZ = image[z];
1231
+
1232
+ var plane = new ArrayBuffer(imageSize * imageSize * 3);
1233
+ var view = new DataView(plane);
1234
+
1235
+ for (var y = 0; y < imageSize; ++y) {
1236
+ var imageZY = imageZ[y];
1237
+
1238
+ for (var x = 0; x < imageSize; ++x) {
1239
+ var imageZYX = imageZY[x];
1240
+
1241
+ var rgbOffset = (y * imageSize + x) * 3;
1242
+ view.setUint8(rgbOffset + 0,
1243
+ Math.floor(clamp_(256.0 * (imageZYX[0] * 0.5 + 0.5) - 0.5, 0.0, 255.0)));
1244
+ view.setUint8(rgbOffset + 1,
1245
+ Math.floor(clamp_(256.0 * (imageZYX[1] * 0.5 + 0.5) - 0.5, 0.0, 255.0)));
1246
+ view.setUint8(rgbOffset + 2,
1247
+ Math.floor(clamp_(256.0 * (imageZYX[2] * 0.5 + 0.5) - 0.5, 0.0, 255.0)));
1248
+ }
1249
+ }
1250
+
1251
+ ctx.zd[z] = view;
1252
+ }
1253
+
1254
+ state = States.FINISHED;
1255
+ this.progress = Progress.DATA_VIEWS;
1256
+ };
1257
+
1258
+ this.step = function () {
1259
+ switch (state) {
1260
+ case States.INITIAL_FILL:initialFill.call(this);break;
1261
+ case States.MIX_STEP_INIT:mixStepInit.call(this);break;
1262
+ case States.MIX_STEP_PROCESS:mixStepProcess.call(this);break;
1263
+ case States.SCALING:scaling.call(this);break;
1264
+ case States.DATA_VIEWS:dataViews.call(this);break;
1265
+ }
1266
+
1267
+ return state == States.FINISHED;
1268
+ };
1269
+ };
1270
+
1271
+ // Lazy-create offscreen canvas only if DOM available (allows Node.js tests).
1272
+ if (typeof document !== 'undefined' && document.createElement) {
1273
+ this.kf = document.createElement('canvas');
1274
+ this.kf.width = 0;
1275
+ this.kf.height = 0;
1276
+ this.jf = this.kf.getContext('2d');
1277
+ } else {
1278
+ this.kf = { width: 0, height: 0 };
1279
+ this.jf = null;
1280
+ }
1281
+
1282
+ this["if"] = function (minWidth, minHeight) {
1283
+ if (this.kf.width < minWidth || this.kf.height < minHeight) {
1284
+ this.kf.width = minWidth;
1285
+ this.kf.height = minHeight;
1286
+ this.jf = this.kf.getContext('2d');
1287
+ }
1288
+ };
1289
+
1290
+ this.effects = [];
1291
+
1292
+ this.loadEffect = function (effectFilePath, onSuccessFunc, onFailFunc) {
1293
+
1294
+ if (this.effects[effectFilePath] != undefined) {
1295
+
1296
+ var effectModel = this.effects[effectFilePath];
1297
+
1298
+ if (effectModel instanceof Array) {
1299
+ effectModel[effectModel.length] = [onSuccessFunc, onFailFunc];
1300
+ return;
1301
+ }
1302
+
1303
+ onSuccessFunc(effectModel);
1304
+ return;
1305
+ }
1306
+
1307
+ this.effects[effectFilePath] = [[onSuccessFunc, onFailFunc]];
1308
+
1309
+ var request = new XMLHttpRequest();
1310
+ request.open("GET", effectFilePath, true);
1311
+ request.responseType = "text";
1312
+ request.ctx = this;
1313
+ request.onreadystatechange = function () {
1314
+ if (request.readyState == 4) {
1315
+ var callbacks = this.ctx.effects[effectFilePath];
1316
+
1317
+ if (request.status >= 200 && request.status < 300 || request.status == 304) {
1318
+
1319
+ var evalText = "(function(ctx) {\n" +
1320
+ request.responseText +
1321
+ "\nreturn new NeutrinoEffect(ctx);\n})(this.ctx);";
1322
+ var effectModel = eval(evalText);
1323
+ this.ctx.effects[effectFilePath] = effectModel;
1324
+
1325
+ callbacks.forEach(function (callback) {
1326
+ callback[0](effectModel);
1327
+ });
1328
+
1329
+ } else {
1330
+ callbacks.forEach(function (callback) {
1331
+ callback[1]();
1332
+ });
1333
+ }
1334
+ }
1335
+ };
1336
+
1337
+ request.send();
1338
+ };
1339
+
1340
+ this.removeEffect = function (effectFilePath) {
1341
+ delete this.effects[effectFilePath];
1342
+ };
1343
+ }
1344
+
1345
+ exports.Context = Context;
1346
+
1347
+ Object.defineProperty(exports, '__esModule', { value: true });
1348
+
1349
+ })));
1350
+ //# sourceMappingURL=neutrinoparticles.js-v1.1.umd.js.map