2 USING: kernel syntax accessors sequences
4 combinators.cleave combinators.short-circuit
5 locals math math.constants math.functions math.libm
6 math.order math.points math.vectors
7 namespaces random sequences threads ui ui.gadgets ui.gestures
17 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
21 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
23 ! This is a Factor implementation of an art piece by Jared Tarbell:
25 ! http://complexification.net/gallery/machines/bubblechamber/
27 ! Jared's version is written in Processing (Java)
29 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
31 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
33 : 2random ( a b -- num ) 2dup swap - 100 / <range> random ;
35 : 1random ( b -- num ) 0 swap 2random ;
37 : at-fraction ( seq fraction -- val ) over length 1- * swap nth ;
39 : at-fraction-of ( fraction seq -- val ) swap at-fraction ;
41 : mouse ( -- point ) hand-loc get ;
43 : mouse-x ( -- x ) mouse first ;
44 : mouse-y ( -- y ) mouse second ;
46 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
47 ! bubble-chamber.particle
48 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
50 GENERIC: collide ( particle -- )
51 GENERIC: move ( particle -- )
53 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
56 bubble-chamber pos vel speed speed-d theta theta-d theta-dd myc mya ;
58 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
60 : initialize-particle ( particle -- particle )
71 0 0 0 1 rgba boa >>myc
72 0 0 0 1 rgba boa >>mya ;
74 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
76 : center ( particle -- point ) bubble-chamber>> size>> 2 v/n ;
78 DEFER: collision-theta
80 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
82 : move-by ( obj delta -- obj ) over pos>> v+ >>pos ;
84 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
86 : theta-dd-small? ( par limit -- par ? ) [ dup theta-dd>> abs ] dip < ;
88 : random-theta-dd ( par a b -- par ) 2random >>theta-dd ;
90 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
92 : turn ( particle -- particle )
94 [ speed>> ] [ theta>> { sin cos } <arr> ] bi n*v
97 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
99 : step-theta ( p -- p ) [ ] [ theta>> ] [ theta-d>> ] tri + >>theta ;
100 : step-theta-d ( p -- p ) [ ] [ theta-d>> ] [ theta-dd>> ] tri + >>theta-d ;
101 : step-speed-sub ( p -- p ) [ ] [ speed>> ] [ speed-d>> ] tri - >>speed ;
102 : step-speed-mul ( p -- p ) [ ] [ speed>> ] [ speed-d>> ] tri * >>speed ;
104 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
106 :: out-of-bounds? ( PARTICLE -- ? )
107 [let | X [ PARTICLE pos>> first ]
108 Y [ PARTICLE pos>> second ]
109 WIDTH [ PARTICLE bubble-chamber>> size>> first ]
110 HEIGHT [ PARTICLE bubble-chamber>> size>> second ] |
112 [let | LEFT [ WIDTH neg ]
114 BOTTOM [ HEIGHT neg ]
117 { [ X LEFT < ] [ X RIGHT > ] [ Y BOTTOM < ] [ Y TOP > ] } 0|| ] ] ;
119 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
120 ! bubble-chamber.particle.axion
121 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
123 TUPLE: <axion> < particle ;
125 : axion ( -- <axion> ) <axion> new initialize-particle ;
127 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
129 METHOD: collide ( <axion> -- )
132 2 pi * 1random >>theta
133 1.0 6.0 2random >>speed
134 0.998 1.000 2random >>speed-d
138 [ 0.00001 theta-dd-small? ] [ -0.001 0.001 random-theta-dd ] [ ] while
142 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
144 : dy>alpha ( dy -- alpha ) neg 6 * 30 + 255.0 / ;
146 ! : axion-white ( dy -- dy ) dup 1 swap dy>alpha {2} \ stroke-color set ;
147 ! : axion-black ( dy -- dy ) dup 0 swap dy>alpha {2} \ stroke-color set ;
149 : axion-white ( dy -- dy ) dup 1 swap dy>alpha gray boa \ stroke-color set ;
150 : axion-black ( dy -- dy ) dup 0 swap dy>alpha gray boa \ stroke-color set ;
152 : axion-point- ( particle dy -- particle ) [ dup pos>> ] dip v-y point ;
153 : axion-point+ ( particle dy -- particle ) [ dup pos>> ] dip v+y point ;
155 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
157 METHOD: move ( <axion> -- )
159 T{ gray f 0.06 0.59 } \ stroke-color set
162 1 4 [a,b] [ axion-white axion-point- ] each
163 1 4 [a,b] [ axion-black axion-point+ ] each
173 [ ] [ speed-d>> 0.9999 * ] bi >>speed-d
177 dup speed>> neg >>speed
178 dup speed-d>> neg 2 + >>speed-d
180 100 random 30 > [ collide ] [ drop ] if
185 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
186 ! bubble-chamber.particle.hadron
187 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
189 TUPLE: <hadron> < particle ;
191 : hadron ( -- <hadron> ) <hadron> new initialize-particle ;
193 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
195 METHOD: collide ( <hadron> -- )
198 2 pi * 1random >>theta
199 0.5 3.5 2random >>speed
200 0.996 1.001 2random >>speed-d
204 [ 0.00001 theta-dd-small? ] [ -0.001 0.001 random-theta-dd ] [ ] while
206 0 1 0 1 rgba boa >>myc
210 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
212 METHOD: move ( <hadron> -- )
214 T{ gray f 1 0.11 } \ stroke-color set dup pos>> 1 v-y point
215 T{ gray f 0 0.11 } \ stroke-color set dup pos>> 1 v+y point
230 100 random 70 > [ dup collide ] when
234 dup out-of-bounds? [ collide ] [ drop ] if ;
236 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
237 ! bubble-chamber.particle.muon.colors
238 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
240 : good-colors ( -- seq )
242 T{ rgba f 0.23 0.14 0.17 1 }
243 T{ rgba f 0.23 0.14 0.15 1 }
244 T{ rgba f 0.21 0.14 0.15 1 }
245 T{ rgba f 0.51 0.39 0.33 1 }
246 T{ rgba f 0.49 0.33 0.20 1 }
247 T{ rgba f 0.55 0.45 0.32 1 }
248 T{ rgba f 0.69 0.63 0.51 1 }
249 T{ rgba f 0.64 0.39 0.18 1 }
250 T{ rgba f 0.73 0.42 0.20 1 }
251 T{ rgba f 0.71 0.45 0.29 1 }
252 T{ rgba f 0.79 0.45 0.22 1 }
253 T{ rgba f 0.82 0.56 0.34 1 }
254 T{ rgba f 0.88 0.72 0.49 1 }
255 T{ rgba f 0.85 0.69 0.40 1 }
256 T{ rgba f 0.96 0.92 0.75 1 }
257 T{ rgba f 0.99 0.98 0.87 1 }
258 T{ rgba f 0.85 0.82 0.69 1 }
259 T{ rgba f 0.99 0.98 0.87 1 }
260 T{ rgba f 0.82 0.82 0.79 1 }
261 T{ rgba f 0.65 0.69 0.67 1 }
262 T{ rgba f 0.53 0.60 0.55 1 }
263 T{ rgba f 0.57 0.53 0.68 1 }
264 T{ rgba f 0.47 0.42 0.56 1 }
267 : anti-colors ( -- seq ) good-colors <reversed> ;
269 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
271 : color-fraction ( particle -- particle fraction ) dup theta>> pi + 2 pi * / ;
273 : set-good-color ( particle -- particle )
274 color-fraction dup 0 1 between?
275 [ good-colors at-fraction-of >>myc ]
279 : set-anti-color ( particle -- particle )
280 color-fraction dup 0 1 between?
281 [ anti-colors at-fraction-of >>mya ]
285 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
286 ! bubble-chamber.particle.muon
287 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
289 TUPLE: <muon> < particle ;
291 : muon ( -- <muon> ) <muon> new initialize-particle ;
293 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
295 METHOD: collide ( <muon> -- )
298 2 32 [a,b] random >>speed
299 0.0001 0.001 2random >>speed-d
301 dup collision-theta -0.1 0.1 2random + >>theta
305 [ 0.001 theta-dd-small? ] [ -0.1 0.1 random-theta-dd ] [ ] while
312 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
314 METHOD: move ( <muon> -- )
318 [let | WIDTH [ MUON bubble-chamber>> size>> first ] |
322 dup myc>> 0.16 >>alpha \ stroke-color set
325 dup mya>> 0.16 >>alpha \ stroke-color set
326 dup pos>> first2 [ WIDTH swap - ] dip 2array point
329 [ speed>> ] [ theta>> { sin cos } <arr> ] bi n*v
336 dup out-of-bounds? [ collide ] [ drop ] if ] ] ;
338 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
339 ! bubble-chamber.particle.quark
340 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
342 TUPLE: <quark> < particle ;
344 : quark ( -- <quark> ) <quark> new initialize-particle ;
346 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
348 METHOD: collide ( <quark> -- )
351 dup collision-theta -0.11 0.11 2random + >>theta
352 0.5 3.0 2random >>speed
354 0.996 1.001 2random >>speed-d
358 [ 0.00001 theta-dd-small? ] [ -0.001 0.001 random-theta-dd ] [ ] while
362 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
364 METHOD: move ( <quark> -- )
368 [let | WIDTH [ QUARK bubble-chamber>> size>> first ] |
372 dup myc>> 0.13 >>alpha \ stroke-color set
375 dup pos>> first2 [ WIDTH swap - ] dip 2array point
377 [ ] [ vel>> ] bi move-by
387 dup speed>> neg >>speed
388 2 over speed-d>> - >>speed-d
392 dup out-of-bounds? [ collide ] [ drop ] if ] ] ;
394 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
396 USE: syntax ! Switch back to non-multi-method 'TUPLE:' syntax
398 TUPLE: <bubble-chamber> < <frame-buffer>
399 paused particles collision-theta size ;
401 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
403 ! : randomize-collision-theta ( bubble-chamber -- bubble-chamber )
404 ! 0 2 pi * 0.001 <range> random >>collision-theta ;
406 : randomize-collision-theta ( bubble-chamber -- bubble-chamber )
407 pi neg pi 0.001 <range> random >>collision-theta ;
409 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
411 : collision-theta ( particle -- theta ) bubble-chamber>> collision-theta>> ;
413 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
415 M: <bubble-chamber> pref-dim* ( gadget -- dim ) size>> ;
417 M: <bubble-chamber> ungraft* ( <bubble-chamber> -- ) t >>paused drop ;
419 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
421 : iterate-particle ( particle -- ) move ;
423 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
425 M:: <bubble-chamber> update-frame-buffer ( BUBBLE-CHAMBER -- )
427 BUBBLE-CHAMBER particles>> [ iterate-particle ] each ;
429 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
431 : iterate-system ( <bubble-chamber> -- ) drop ;
433 :: start-bubble-chamber-thread ( GADGET -- )
434 GADGET f >>paused drop
439 [ GADGET iterate-system GADGET relayout-1 1 milliseconds sleep t ]
446 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
448 : bubble-chamber ( -- <bubble-chamber> )
449 <bubble-chamber> new-gadget
451 randomize-collision-theta ;
453 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
455 : bubble-chamber-window ( -- <bubble-chamber> )
457 dup start-bubble-chamber-thread
458 dup "Bubble Chamber" open-window ;
460 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
462 :: add-particle ( BUBBLE-CHAMBER PARTICLE -- bubble-chamber )
464 PARTICLE BUBBLE-CHAMBER >>bubble-chamber drop
466 BUBBLE-CHAMBER BUBBLE-CHAMBER particles>> PARTICLE suffix >>particles ;
468 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
470 :: mouse->collision-theta ( BUBBLE-CHAMBER -- BUBBLE-CHAMBER )
472 BUBBLE-CHAMBER size>> 2 v/n
476 BUBBLE-CHAMBER (>>collision-theta)
479 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
481 :: mouse-pressed ( BUBBLE-CHAMBER -- )
483 BUBBLE-CHAMBER mouse->collision-theta drop
487 BUBBLE-CHAMBER particles>> [ <hadron>? ] filter random [ collide ] when*
488 BUBBLE-CHAMBER particles>> [ <quark>? ] filter random [ collide ] when*
489 BUBBLE-CHAMBER particles>> [ <muon>? ] filter random [ collide ] when*
493 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
495 <bubble-chamber> H{ { T{ button-down } [ mouse-pressed ] } } set-gestures
497 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
499 : collide-random-particle ( bubble-chamber -- bubble-chamber )
500 dup particles>> random collide ;
502 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
504 : big-bang ( bubble-chamber -- bubble-chamber )
505 dup particles>> [ collide ] each ;
507 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
509 : collide-one-of-each ( bubble-chamber -- bubble-chamber )
512 [ [ <muon>? ] filter random collide ]
513 [ [ <quark>? ] filter random collide ]
514 [ [ <hadron>? ] filter random collide ]
517 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
518 ! Some initial configurations
519 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
522 bubble-chamber-window
523 10 [ drop hadron add-particle ] each
526 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
530 bubble-chamber-window
532 1789 [ muon add-particle ] times
533 1300 [ quark add-particle ] times
534 1000 [ hadron add-particle ] times
535 111 [ axion add-particle ] times
538 [ [ <muon>? ] filter random collide ]
539 [ [ <quark>? ] filter random collide ]
540 [ [ <hadron>? ] filter random collide ]
543 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
545 : hadron-chamber ( -- )
546 bubble-chamber-window
547 1000 [ hadron add-particle ] times
551 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
553 : quark-chamber ( -- )
554 bubble-chamber-window
555 100 [ quark add-particle ] times
559 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
562 <bubble-chamber> new-gadget
564 randomize-collision-theta
565 dup start-bubble-chamber-thread
566 dup "Bubble Chamber" open-window
568 42 [ muon add-particle ] times
569 30 [ quark add-particle ] times
570 21 [ hadron add-particle ] times
571 7 [ axion add-particle ] times
577 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
580 <bubble-chamber> new-gadget
582 randomize-collision-theta
583 dup start-bubble-chamber-thread
584 dup "Bubble Chamber" open-window
586 100 [ muon add-particle ] times
587 81 [ quark add-particle ] times
588 60 [ hadron add-particle ] times
589 9 [ axion add-particle ] times
595 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
598 <bubble-chamber> new-gadget
600 randomize-collision-theta
601 dup start-bubble-chamber-thread
602 dup "Bubble Chamber" open-window
604 550 [ muon add-particle ] times
605 339 [ quark add-particle ] times
606 100 [ hadron add-particle ] times
607 11 [ axion add-particle ] times
613 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
615 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
617 : muon-chamber ( -- )
618 bubble-chamber-window
619 1000 [ muon add-particle ] times
620 dup particles>> [ collide randomize-collision-theta ] each
623 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
625 : original-big-bang ( -- )
628 dup start-bubble-chamber-thread
629 dup "Bubble Chamber" open-window
631 1789 [ muon add-particle ] times
632 1300 [ quark add-particle ] times
633 1000 [ hadron add-particle ] times
634 111 [ axion add-particle ] times
640 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
642 : original-big-bang-variant ( -- )
643 bubble-chamber-window
644 1789 [ muon add-particle ] times
645 1300 [ quark add-particle ] times
646 1000 [ hadron add-particle ] times
647 111 [ axion add-particle ] times
648 dup particles>> [ collide randomize-collision-theta ] each
651 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!