TheDLA

TheDLAでパターン形成の基礎を学ぼう!

by Daishin Ueyama

English version

はじめに

パターン形成の基礎モデルとして有名な DLA (Diffusion Limited Aggregation) のシミュレーション(Simulation)を実行・観察できる iPhone, iPad アプリ TheDLA を作成し公開しました。遊びながら,でたらめな運動がどのようにして自然界に見られるような樹枝状の形を作り上げる のかを学ぶことができます。こちらまたは下のバナーをクリックすることでダウンロードできます。遊ぶには,iPhone , iPad や iPad touch等の iOS 機器が必要です。

アプリの作成については全くの素人ですが,今後精進してより最適化された使いやすいアプリに進化していく予定です。これから iPhone アプ リを作ってみたい!という方には,Stanford大学の iTunes U をおすすめします。こちらからたどって下さい。講師の Paul Hegarty 氏の説明や デモは大変わかりやすく,C言語の知識と Objective-C の参考書が手元にあれば,この iTunes U の内容だけで TheDLA 程度のものは作れま す。(最近のシリーズでは Swift に使用言語が変更されています。)

なお,ここではDLAについて詳しい解説はしません。詳しい内容は,例えば松下先生による名著「フラクタルの物理(I)(II), 松下貢, 裳華房」など を参照して下さい。

Diffusion Limited Aggregation (DLA)入門

日本語では,拡散律速凝集とよばれます。

上の図を見て下さい。一番左にあるように,種粒子とよばれる粒子が平面上にあって固定されているとします(赤色)。そこから遠くに粒子を 置き(白色),それがでたらめに動くとし,この粒子を自由粒子とよぶことにします。でたらめに動くとは,例えばサイコロを振って1の目が でたら左,2の目がでたら右,3の目がでたら上,4の目がでたら下,それ以外なら動かないといったルールで動かすことを言います。またこの ことをランダムウォーク(乱歩・酔歩)とよびます。

さて,このランダムウォークする自由粒子は平面上を動き回りますが,たまたま種粒子の隣にくる場合があるでしょう。種粒子の隣に自由粒子 がきたら自由粒子は種粒子に付着するとし,それ自身が種粒子と同等の粒子となるとします。自由粒子が種粒子に付着したら,また新たな自由 粒子を遠方に置き,これを繰り返します。

すると,上の図中央のように徐々に種粒子は成長します。さて,この種粒子が創り出す形はどのようなものになるでしょうか?

まずは想像してみて下さい。

TheDLAの起動

TheDLAがインストールされると,iPhoneでは下左の画像のようなアイコンがホームスクリーンに加わります。このアイコンをタップすること で TheDLA が下右の画像のように起動します。(TheDLA は iPad の大画面を生かして動作をする Universal アプリです。iPadでは表示は多少 異なりますが操作方法などは同じです。)

起動画面を見ると,中心に赤い点があり,その周りに多数の黄色い点があります。

中心の赤い点が,先に述べた種粒子で,周りの黄色い点が自由粒子です。本来の DLA では,自由粒子を一つずつ加えていきますが,スピード アップの為に一度に3000粒子が種粒子からある程度距離を置いてでたらめに配置してあります。これらがでたらめに動き,種粒子に付着しま す。

下の方にある,再生ボタンに似たボタン(三角形のマーク)をタップするとDLAのシミュレーションが開始します。このボタンがシミュレー ションのオン・オフをコントロールします。

しばらく時間が経過したものが,下の画像になります。これがいわゆる DLA パターンです。想像したとおりの形でしたでしょうか?再生ボタ ンに似たボタン(三角形のマーク)をもう一度タップすると,シミュレーションが一時停止されます。

次では,まずはランダムウォークする粒子の性質を見て,何故上のような枝状の形ができあがるのかを考えていきましょう。

ランダムウォークは形を壊す

DLAの枝模様は,上述の種粒子に自由粒子が付着し大きくなったものです。この枝模様を自由粒子の初期配置として動かすことで,ランダム ウォークの性質を見る事にします。枝模様ができた状態で,シミュレーションを一時停止し,画面を「2本指でダブルタップ」します。例え ば,人差し指と中指でピースサインを作り,その状態で2本の指先で画面を素早く2回トントンとタップします。すると,次のメニューが画面に 現れます。

このメニューで,できあがった枝パターンを消去することができます。Clear は文字通り消去。Blend はひとまず飛ばして,次の Diffuse をタッ プします。するとおおよそ次の様になるはずです。

画面上では先の枝パターンが単に黄色くなったように見えますが,先の枝パターンの配置そのままに,全ての粒子を自由粒子に変換した結果で す。つまり,ここでシミュレーションを開始すると,この配置を初期配置として各自由粒子がランダムウォークします。どうなるでしょう?

上の画像がその結果です。枝状の模様は瞬く間に崩れ去り,ほぼ一様な粒子の分布が見られます。

これはおおよそ想像した通りではないでしょうか。一つ一つの粒子は,でたらめに動いていますから,最初にある程度規則的な配置をしていた としても,時間がたつにつれて初期配置の情報は失われ,ばらばらの配置となっていきます。

これは砂山が風雨で崩れていくプロセスそのものであって,ことわざで言うところの「覆水盆に返らず」です。

今回は,自由粒子の初期配置としてDLAパターンを用いた訳ですが,もう少し一般的な形からもやってみましょう。

TheDLA では種粒子をダブルタップで置くことができます(1本指で画面をトントンと2回たたく)。また,画面をタッチし,0.5秒程度時間を おいて指を滑らせると種粒子を連続的に置くことができます。

そのようにして,シミュレーションを停止した状態で種粒子を置いてみます。例えば次の様に描きました。

ちなみに,ネットにつながった状態で TheDLA を利用すると,上の画像のように上部にバナー広告が表示されることがあります。

さて,先ほど同様に2本指で画面をダブルタップし,Diffuse を選択します。

さて,この配置からシミュレーションをはじめると・・,先ほどと同じですね。まず文字の輪郭が素早くぼやけて文字として認識できなくなり ます。しばらくは文字があった場所に多くの粒子が存在し,文字の痕跡がうかがえますが,さらに時間がたつとそれすらわからなくなります。

このように,ランダムウォークの性質を知ると,ランダムウォークはパターンを壊す事はしても,パターンを作る事などできないように思えま す。では,何故 DLA では魅力的な枝パターンが生じたのでしょうか?

設定画面

画面上右下の歯車マークをタップすると,設定画面が開きます。

この設定画面は,バージョン 1.14 のものなので,バージョンによって多少異なる場合があります。さて,上の方にある Reset ボタンをタップ すると,TheDLA の粒子の状態を最初の状態に戻すことができます。Help をタップすると簡単な説明を見る事もできます。

下の方にあるスライドバーで,ペンのサイズ(先ほど 大信 と描きましたが,種粒子を置くときの太さに対応)を変更できます。その下の Simulation speed で,シミュレーション速度をコントロールできます。初期値は,ある程度形ができあがる様子が観察できるように遅く設定し てあります。一番右にスライドさせると,その携帯端末の最高速度で動作します。以下,その他のスイッチの説明を書きます。

  • Rainbow スイッチ:オフにすると白黒の枝もようとなります

  • DLA スイッチ:種粒子(DLAパターン)の表示・非表示のスイッチです

  • Anim スイッチ:Onにすると色が時間的に変化する様子を楽しめます

  • Eyes, Nose, Mouth, Hanage modeスイッチ:後述

また,Helpにありますが,画面のタップの仕方で様々なコントロールができます。

  • ダブルタップ: 固定粒子を置くことができます。サイズは設定の Pen size で変更可能です。

  • シングルタップ:一部の固定粒子を消すことができます。自由にパターンを加工できます。

  • 2本指ダブルタップ:全固定粒子の消去ができます + α。

  • 2本指移動:Panできます。

  • 長押し移動:ペンのように固定粒子群を描けます。

  • タップ後長押し移動:消しゴム機能となります。

枝模様は何故できるのか!?

「ランダムウォークは形を壊す」で見たように,ランダムウォークが綺麗な枝模様を創り出すというのは不思議です。どういったメカニズムが あるのでしょうか?

TheDLAで観察してみましょう。

まずは,設定画面で Simulation speed を一番左に設定し,粒子のランダムウォークをゆっくりと観察できるようにします。その上で,Reset ボ タンをタップし,粒子配置を初期状態に戻します。(毎回違う乱数列を用いるので,毎回違う枝模様ができあがります。)

種粒子周りがよく見えるように,ピンチモーション(2本指で画面に触れ,指と指の間隔を拡げる)で拡大しましょう。拡大した状態で,シ ミュレーション開始ボタンをタップします。

黄色い自由粒子がでたらめに動いている様子がわかります。また,種粒子に接触すると取り込まれる様子もよくわかります。驚いたことに,枝 模様はすぐに現れます。しばらく観察を続けましょう。

ある程度,枝模様が大きくなったら,ピンチモーション(2本指で画面に触れ,指と指の間隔を狭める)で全体像が見えるようにしましょう。2 本指で画面に触れ,そのまま上下左右に滑らせると画面全体を移動させることもできます。

上の図は,そのように「育った」枝の一部を拡大したものです。複雑な枝模様が入り江のような構造を作り上げています。まず気が付くのは, 入り江のような構造の中に黄色い自由粒子が殆ど無い事でしょう。これでは,入り江の中にある枝はこれ以上伸びることはできません。さらに 良く見ると,全体としてほぼ円形の形をしていますが,その最前線部分には多くの黄色い自由粒子が見られるということです。

シミュレーションを停止して,設定画面で DLA を OFF にしてみると,自由粒子の分布が丁度枝パターンと相補的になっている事がわかると同 時に,入り江の奥の方には自由粒子が全く入り込めていないことがわかります。

TheDLAのシミュレーションを見るとよくわかりますが,自由粒子が入り江の奥に入り込み,入り江の奥の枝に付着する事は殆どありません。 自由粒子の動きはでたらめで,ふらふら動く為,入り江の奥に到着する前にどこかの枝に取り込まれてしまうのです。

これがまさにDLAパターンの本質である,遮蔽効果です。

パターンは1つの種粒子を元に徐々に成長しますが,成長した枝が自身が引き起こす遮蔽効果は,出た枝はさらに伸び,出遅れた枝はますます 伸びることが難しいという状況が生みだします。

このような遮蔽効果が小さな入り江,大きな入り江それぞれにおきるために,複雑な枝模様ができあがるのです。

もっと遊んでみよう!

おおよそ,原理はわかったと思います。TheDLAの他の機能も試してみましょう。

下に "P" ボタン "g" ボタンがあります。"P"ボタンは自由粒子の描画のオン・オフのスイッチです。"g"ボタンは,iPhone等に内蔵されている加 速度センサのオン・オフのスイッチです。"g"ボタンをオンにすると,加速度センサが起動し,粒子の運動に重力の効果が付加されます。粒子 がiPhone等の傾きによって動きが変化する事がわかります。また,できあがるパターンにも「異方性」が見られます。

設定ボタン左の "C" ボタンは色変更ボタンです。色を変更し,枝模様をなぞると色を枝模様の色を変更できます。 "C" はクリア(透明)のつも りで,色変更を消すことができます。例えば,DLAをフランス国旗風にアレンジなど・・。

左下のカメラマークをクリックすると写真とDLAパターンを組み合わせることができます。DLAの枝模様は,自然に見られる木の枝によく似て います。本物の木々に紛れてDLAを配置してみました。わかりますか?

作成した画像は,カメラボタン横のいわゆるシェアボタンでカメラロールに保存したり,Twitter, Facebook への投稿ができます(Ver.1.14 か ら iOS6 と iOS5 で動作が違う仕様となりました)。

設定画面の Anim をオンにすると色が変化します。その状態で,シェアボタンから Save image でカメラロールに画像を保存すると,色変化に 対応して8枚の画像がカメラロールに保存されます。それらを,他のアプリ(例えば Gifboom や Gifture)で Animated GIF ファイルに変換する と,ホームページなどで動く画像として活用できます。多少画質が落ちてしまいましたが,色々活用できそうです。左下の画像は,Rainbow を オフにして Anim をオンにした状態で画像をカメラロールに保存したものを利用しました。右下の画像は,Rainbow, Anim 共にオンの状態で保 存したものから作成したものです。

ところで,色変化ですが,種粒子群への接着順に色を周期的に変更しています。アニメーションでの動きは,それを反映していますので,どの ような順番で粒子が取り込まれたかを見ていることになります。お遊びのように見えて,実はかなり科学的なのです。。

人の顔で遊んじゃえ!

DLAの枝模様と人の顔の組み合わせは,なかなか面白い効果が得られます。iOSには,顔認識機能が含まれていますので,それを用いて顔写真 の目と口の位置を検出できます。それらを用いる機能が,設定画面中の Eyes, Nose, Mouth のスイッチおよびカメラボタン中の Detect! ボタン です。

人間の顔が含まれる写真を背景に設定し,カメラボタン内の Detect! をタップすると,設定に応じて,目や口の位置に種粒子が自動的に配置さ れます。例えば集合写真等において,自分以外の人の顔を隠したいといった場合に良く黒線が用いられますが,DLAでお洒落に目を隠すのはど うでしょうか?

適当な集合写真がありませんでしたが・・きちんと目が検出できています。ここではやりませんが,もちろん,先に説明したとおり, Animated GIF にする事も可能です。

終わりに

最後の方はおふざけになってしまいましたが・・。

TheDLA を用いるとでたらめな運動が,自然界に見られるような枝模様を作り上げる原理を「直感的に」知ることができます。私はこのアプリ を,例えば高校での模擬授業や大学低学年での授業などで利用するために開発しました。そのような用途で利用していただければ幸いです。も ちろん,ある種のジョークアプリとしての活用も歓迎です!

機能拡張の希望などあればお知らせ下さい。可能な限り対応します。ただし,本業とは別に週末プログラマーとして開発を行っていますので, 対応できない事も多いと思います。あらかじめご了承下さい。