忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

波を使って時間振動拡散をシミュレートする

以前、時間が繰り返すイカスミ拡散(イカ墨が拡散しては集まり拡散しては…をくりかえす)のシミュレーションを行いましたが、それはベイズ確率で計算したものでした。今回は、確率の代りに波を使って計算します。


時間が繰り返さない普通の拡散

時間が繰り返すシミュレーションをする前に、心の準備として、普通の拡散のシミュレーションを行います。

拡散のシミュレーションは普通、イカ墨(あるいは何らかの粒子のあつまり)が別の場所へ移動する確率を利用して計算するのですが、ここではそのかわりに波を使って計算します。波というのは色んな種類のものを組み合わせることでほとんどどんなものも表せるのです。

中央にイカ墨が集中した状態からシミュレーションがスタートします。スタートボタンを押してください。イカ墨が周囲に拡散していく様子がわかるでしょう。実はこれは、たくさんの波を足すことによって計算されているのです。

それぞれの波は指数関数的に減少しており、これが拡散パターンを作り出します。ただし、すべてが同じ速度で減衰しているわけではありません。波長の短い波を長い波より速く減衰させるのがコツです。波長が短いというのは言い換えると「カクカクしている」ということなので、それが速く減衰するということは、最終的な計算結果の「なめらかさ」が大きくなるということを意味しているのです。(はじめの状態は一点に集中しているという意味でカクカクしていますが、拡散しきった状態はとてもなだらかです。)

時間が繰り返す拡散

では、この時間を振動させてみましょう。

このシミュレーションはイカ墨の拡散です。しかし普通のシミュレーションと異なり、時間が途中で逆転します。つまり拡散したイカ墨が、再び一点に戻るのです。

これには以前の指数関数の繰り返しを利用しています。それぞれの波を指数関数的に減衰させる代わりに、心臓の鼓動のように繰り返し強さが戻るパターンにしてやるのです。そうすると、それらの波が足し合わせたイカ墨のパターンも時間が繰り返すようになります。

確率の代りに波を使える

私は以前時間が繰り返すパターンをシミュレートするには確率か波が使えると述べたことがありました。私はその時、「どちらかが使える」というニュアンスで述べたのですが、もしかすると「どちらも使える」のかもしれません。まあ全ての場合でそうなのかはわかりませんが、少なくとも物質の拡散の場合はどちらを使っても繰り返しパターンをシミュレートできるのです。

拍手[0回]

PR