更新 年始編

・・・ある日の午前1時過ぎの真夜中に何もないベランダの外から青森辺りにありそうな田舎の踏切(音が高くて周波数が少ない方)の音が聞こえてきたんですよね。しかもそっち側には線路も踏切もありませんからね、反対にはありますけど。怖い。
まあ何の音かは分からないですけど何かの音でしょう聞こえた以上は。

そういえば前回アトラクターが作れないと言いました。直列形式の処理でないと出来ない問題は正しくその通りでしたが、もう一方の無限大にすっ飛んで行ってしまう問題は解決しました。

直列処理をする方法のひとつはAttribute Wrangle内でfor文を実行するやり方で、Processingでやってるのをそのまま映した形です。

ただし実行するイテレーション(漸化式の実行=生成するポイント数)に応じてどんどん重くなる上、アニメーションをさせようとほんの少しでもスタート地点を動かすとストレンジアトラクター特有の「初期値鋭敏性」によってブルブル震えます。そのためとてもじゃないですが見るに堪えない映像にしかならないので、描く軌跡そのものが必要にならない限りは使うことは無いと思います。

ではもう一方は何かと言うと、Solverで毎フレームごとにAttributeWrangleを実行する方法です。

この方法ではScatterノードなどで生成した複数のポイントを時間方向に発展させることが出来ます。軌跡はTrailノードを使用することで生成できますし、SolverのSubstepsからシミュレーションの速さを変えられます。こっちの方が使いやすいですね。

そして無限大にすっ飛んで行ってしまう問題は、元の座標からアトラクターの漸化式部分で微分を取る必要があったことでした。引用はこちらの記事(https://qiita.com/shokishimada/items/acdb1e736d8f441d27d1)の、ローレンツ方程式と見出しのある場所に記載されたコードから。
h=0.001 というのは lim h=0 のことで、ローレンツ方程式の中のアトラクターの性質を示す部分にだけ僅かな時間方向に動かしその差分を計算するからです。
例えばローレンツ方程式のx座標に関係するパラメータは p=10 です。
そのためx座標の計算に使う式は、
x – px + py
ですが、そのうちローレンツ方程式の動作を作っている箇所は
-px + py
の部分になります。そのためこの方程式由来の部分を極小の動きにします。
x + h(-px + py)
これにより、元の座標からほんの少しだけアトラクターに引き込まれたときの座標を計算できるというわけです。
Processingの時はこんなのなかった気がするんですけど・・・?
でもあの時にも設定項目に極小のパラメータがあって、それで項を乗算していたような気がするので気が付かなかっただけで同じことをしていたんでしょう。ちなみにその時は微分と言われても「ば な な」としか答えられませんでした。

これが出来たことで他のアトラクターも出来ることが分かったので、Processingで作ったアトラクターもたぶんできると思います。Solverはやっぱり強い。
そんなところです。