「ベロウソフ・ジャボチンスキー反応(Belousov Zhabotinsky reaction)」のシミュレーションである。CAM-PCには、4枚のビットプレーンが存在するが、それらを総て使ったやや複雑なルールとなっている。(詳細については、末尾のソースを参照)
上記の化学反応は、20世紀中葉に発見された振動的化学反応で、溶液中の物質の濃度が周期的に変動することにより特異な色彩変化を生ずるというものだ。
CAM-PCのルールテーブルには、三種類のものが用意されているが、ここで紹介するのは三番目のもので、上記の化学反応との視覚的類似性が最も高いとされている。
なお、実機で動作させた場合にモニタに表示される色とムービーの色とは通常は出来るだけ揃えているのだが、これに限っては意図的に変えてある。理由は、CAM-PCのカラーパレットの制約上、実機での表示色が全体的に鈍い印象であることと、当時のスパコンでのシミュレーション画像が、サイケデリックで強烈なインパクトを感じさせるものだったので、当時を偲んでその色彩を再現したかったからだ。また、シミュレーションのスピードも実機の約1/5に設定した。最高速ではセル空間の状態遷移の様子が良く判らないからだ。
再生してみると、最初の「ランダムスープ」中から、次第に小さな塊が出現し、世代ごとに目まぐるしく色の変化を繰り返す。やがて、それらの塊は、自らを内部に取り込むような奇妙な二腕の渦巻きのような形に変化し、明滅を繰り返しながら画面を埋め尽くしてゆく。それはあたかも1970年代の現代美術のような暴力的な色彩の横溢であり、混沌から自己組織化した有機的でダイナミックな運動体である。
などと書いていて突然、昔のことを思い出してしまった。今を去ること15年以上も前のことだが、帯状疱疹にかかって入院したことがあった。正確に言うと、帯状疱疹が治癒した後も、痛みだけが残るという「帯状疱疹後神経痛」という病名だったのだが、この痛みが凄まじく、モルヒネ以外の鎮痛剤では効果がないので、都内の某大病院のペインクリニック科で一箇月ほど入院治療を受けたのである。病室は六人部屋だったが、同室の患者さんの一人にTさんと言う鳶職人の方がいらっしゃった。
Tさんは、背中から腕にかけて「倶利迦羅紋紋」(くりからもんもん)の入れ墨をされていた。年齢は50台の後半で体格も良かったので、同室の他の患者は、その筋の人ではないかと少し恐れていたのだが、病名が同じだったこともあり、話しかけてみると至極気さくで真っ当な方だった。入院とは言え、午前と午後に神経ブロックの治療があるだけで、痛みが薄れると暇なばかりの毎日だったので、すっかり病人仲間になってしまった。ホンダの本社にお勤めの息子さんがおられ、良くお見舞いに来ていた。Tさんご自身は潮来に住んでいるとのことだったが、浅草に親戚の方がいらっしゃって、ある日の夕食後に、大きなごま豆腐を持ってお見舞いに来られたことがあった。いかにも下町風のご婦人だったが、見舞いを終えて彼女が帰った後、一人では食べきれないので半分食べろということになりご馳走になった思い出もある。このムービーを見ていて、ふとTさんの派手な入れ墨とごま豆腐の味を思い浮かべてしまった。私がCAM-PCを購入したばかり頃の出来事である。
以下にFORTHのソースを示す。前述のようにZhabo-Cのワードで定義されたテーブルを採用している。
\ ZHABO.EXP Zhabotinsky reactions (CAM Book 9.3) 30Mar89nhm
Plane 0: Tube-worms
Plane 1: Alarm integrator
Plane 2: Timer (LSB)
Plane 3: Timer (MSB)
Three versions are available, with different alarm thresholds;
they are obtained with Alt-A, Alt-B, and Alt-C. Best is Zhabo-C.
Experiment starts with Zhabo-A, 50% randomness (different in
each of the four planes), and the IRGB color map.
For convenience, the initial configuration is also saved in
the plane buffers, from where it can be gotten with `g'.
To run version B from initial configuration, type `Alt-B g'.
Use f2 to get IRGB.map (richer colors); F2 for Std.map. If
you want to factor out the phase waves, use Alt-R for a color
map that counter-rotates the colors (Alt-N to return to normal).
The file ROTMAP.4TH was used to help contruct this colormap.
\ Zhabotinsky reactions (read screen 0) 30Mar89nhm
NEW-EXPERIMENT CAM-A N/MOORE &/CENTERS
DEFER THRESH ( n -- bit)
: ALARM ( -- bit) N.WEST N.EAST S.WEST S.EAST
NORTH SOUTH WEST EAST + + + + + + + THRESH ;
: TUBE-WORMS &CENTERS { 1 0 0 0 } >PLN0 ALARM >PLN1 ;
CAM-B N/MOORE &/CENTERS
: LATENCY-TIMER &CENTER &CENTER' AND IF
3 ELSE
CENTERS { 0 0 1 2 } THEN >PLNB ;
MAKE-TABLE LATENCY-TIMER
: THR-A { 0 0 1 1 1 1 1 1 1 } ;
: THR-B { 0 0 0 1 1 1 1 1 1 } ;
: THR-C { 0 0 1 0 1 1 1 1 1 } ;
: Zhabo-A ['] THR-A IS THRESH MAKE-TABLE TUBE-WORMS ; ALIAS A
: Zhabo-B ['] THR-B IS THRESH MAKE-TABLE TUBE-WORMS ; ALIAS B
: Zhabo-C ['] THR-C IS THRESH MAKE-TABLE TUBE-WORMS ; ALIAS C
Zhabo-A IRGB.map
HALF 0 RND>PL HALF 1 RND>PL \ 50% random to each pl
HALF 2 RND>PL HALF 3 RND>PL PLS>PBS \ and save to buffer.
: ROTMAP IRGB { 2 7 1 3 4 5 6 F 0 9 A B 8 D E C } >IRGB ;
: CYC STEP MAKE-CMAP ROTMAP ;
: Rotating.colormap MAKE-CMAP IRGB-MAP MAKE-CYCLE CYC ; ALIAS R
: Normal.colormap MAKE-CMAP ROTMAP MAKE-CYCLE STEP ; ALIAS N
Powered by
コメントする