哲学対話イベントで使える Udon ギミックを作った話 #3 - 中心力
今回は、哲学対話イベントで使用するために開発した力学モデルを使用したメモツールの実装に関する技術的な話をします。第 3 章では、力学モデルを UdonSharp で実装する際に必要だった工夫の、特に中心力について紹介します。
中心力
力学モデルを実装する際に、単純に斥力と引力を計算するだけでは、接続されていない頂点が無限に外側へ飛び出してしまう問題がありました。そこで、グラフの中心に向かう引力、いわゆる中心力を追加しました。
中心力を計算するためには、以下のステップを踏みます。
- 各頂点から中心(原点)へのベクトルを計算します。
- 中心力の強さ(kCenter)を用いて、中心への引力を計算します。
- 既存の力(斥力と引力)に中心力を加算します。
具体的な計算は次の通りです。
kCenter
:中心力の強さを示す定数point
:各頂点の現在の座標forces
:これまでに計算された力の合計
float centerDelta = 0 - point
float centerAttractiveForce = point.Length / kCenter * centerDelta
forces = forces + centerAttractiveForce // 既存の力に反映
これで、無限に外側へ飛んで行かずに済みます。
次回予告
次回は軽量化のためのマルチスレッド処理について扱います。