見出し画像

TheDLA というアプリ

TheDLA というアプリがある。私が作成したアプリで、AppStoreに登録したのはもう10年以上前になる。こちら、iPhone や iPad 用に開発したのだが、いわゆる Apple Silicon Mac であれば、Mac上でも動作する。

DLA (Diffusion-limited aggregation, 拡散律速凝集)とは

TheDLA は DLA のシミュレーションをするアプリだ。DLAとは何か?日本語では、拡散律速凝集と呼ばれる。パターン形成の基本中の基本といえるようなものである。問題としては、この後紹介するHPに書いてあるが、簡単な問題設定を説明しよう。

DLAの設定

上の画像を見てもらいたい。左、真ん中、右と図がある。まず一番左を見ると、種粒子と書かれた赤い点がある。また、上には粒子と書かれた白い点がある。

白い粒子のランダムウォーク

この白い粒子が、ランダムウォーク(乱歩)する。ランダムウォークとは、デタラメに上下左右に移動するということ。移動はランダムであるということは、サイコロで動かすということである。たとえば、サイコロを振って1の目がでたら上に移動、2の目なら下、3なら右、4なら左、5、6なら動かないと言ったように、サイコロによって支配される動きだ。

この、白い粒子は赤い種粒子と呼ばれる動かない粒子(種粒子は動きません)から離れたところに配置され、そこからランダムウォークする。

白い粒子と赤い粒子が出会うことが起こる

白い粒子はランダムウォークする。しばらく経つと、白い粒子が赤い粒子の隣に「たまたま」来ることがある。そうなると、白い粒子は赤い粒子の仲間になり(種粒子に取り込まれる)、赤い粒子の集団が一つ育ち、大きくなる(真ん中の図)。

新たな白い粒子を投入

白い粒子が赤い種粒子の仲間になってしまったら、白い粒子を新たに赤い粒子たちから離れたところに配置し、またランダムウォークさせる。すると、また赤い種粒子の集団の隣に来ることがあるだろう。そうなると、その粒子は種粒子の一員となり、種粒子の集団はさらに大きくなる。

さてどうなるか?

このプロセスを繰り返す。何度も何度も。そうすると、種粒子の集団はどんどん大きくなる。さてどういう形になるか?これが、図の一番右の「?」の意味である。

樹枝状パターン

次の図が、実際に TheDLA で作成したパターンである。TheDLAは、上で説明したようなことを実際にシミュレートするが、1つ1つ白い粒子(ランダムウォークする粒子)を加えていたのではあまりに時間がかかるので、3000個程度を同時に与えて動かしている。樹枝状パターンという、木の枝のようなパターンが現れる。色の意味をよく聞かれるが、これは移動する粒子が種粒子の集団にくっついていくわけだが、その順番を色にして表現してある。実際には、この色は時間と共に動くようにプログラムされている。それは実際にアプリでみてほしい。(このアニメーションを高速に行うことも結構頭を使った記憶がある。数日、色々試して最終的に完成させた。)

TheDLA に現れた樹枝状パターン

ランダムな動きが秩序を作る

この DLA が面白いのは、移動する粒子の動きはランダムであって、無秩序であるが、その無秩序な粒子が、樹枝状パターンという秩序を作り出すという驚きにある。これは、自然界におけるパターン形成の基本的な原理であって、大変興味深いものなのだ。ぜひ遊んでみてほしい。

簡単な説明は、次のWebページにある。かなり昔に書いたので、スクショなど古いバージョンのものになっていて、昔の iPhone アプリの UI はこんなだったよなと懐かしく思ったりする。

Wikipediaにも

なんと、Wikipedia 英語版の Diffusion-limited aggregation の External Links にも載っています。ただし、これは自分で追加した😆

1から作り直そうとしてみた

それはそうと、今回この note を書こうと思ったのは、このアプリを作り直そうと思ったから。もう、10年以上前(おそらく、2012年ごろ作成)に作成したし、当時 iPhone アプリ作成のメイン言語であった Objective-C で書かれていて、メインテナンスも面倒になってきたので、1から作り直そうかと思っている。そこで、Objective-C のソースコードを ChatGPT o3-mini-high に投げて Swift + SwiftUI で基本機能のみで書かせていたら、なんとも動作速度が遅い。いや、そうは言っても動くものができたので ChatGPT すげーー!ではあるのだが。しかしながら、10年以上前の iPhone でも実用的に動いていたのに、最新の iPhone でも遅いというのはどういうことか。SwiftUIが、こういう高速な描画には向いてないと ChatGPT はいうが・・。対応策として、ゲームなどで利用する、Metal 等の高速なより低レベルなグラフィックエンジンを使うと良いようだが、それは面倒でだし、技術的な変化を追うのも面倒である。それなら昔の Objective-C コードで良いのかなと思ったりして、作り直すことをするかどうか微妙になってきた。

なかなか秀逸なアプリ

いや、自分でも感心しているのだが、この TheDLA はとても高速だ。当時の今から思えば低速の iPhone で動かすためにさまざまな工夫をしている。まぁ、よく色々考えたなと思うが。最初は比較的シンプルだったのだが、それに動画保存機能とか、人の目を検知して、目の位置に種粒子を置くとかそういう拡張をしすぎてしまったため、コードが大変ややこしくなってしまった。当時は、パワーが僕にはあったのだなと改めて感心する。

とりあえず、現状維持

というわけで、しばらく新しいバージョンにはできそうにないので、現状のアプリで遊んでもらえると嬉しい。実はたまにメインテナンスはしている。新しい iOS 等に対応する必要もあるのだ。Objective-C なんて、このアプリのコードでしか今は使っていないので、その文法等を思い出すにはしばらく時間がかかったりする。ChatGPT があるので、これからは楽かもしれないが・・。

バナー画像

いつものように、上の文章を ChatGPT 4o にコピペして、横長画像を作らせたものが、この記事のバナー画像である。これなんて、シミュレーションをしているわけではないが、なんというか、樹枝状パターンをある意味再現していて、フラクタル構造らしきものが見えている。ああ、なんというかすごいな。画像に添えてあった、ChatGPTのお言葉は次のとおり。

こちらが TheDLA に合う横長の画像です。DLA の概念を表現した、ダイナミックで科学的な雰囲気のアートになっています。気に入ったらぜひ使ってください!

ChatGPT 4o

使わせていただきました👍


いいなと思ったら応援しよう!

この記事が参加している募集