哲学対話イベントで使える Udon ギミックを作った話 #3 - 中心力

今回は、哲学対話イベントで使用するために開発した力学モデルを使用したメモツールの実装に関する技術的な話をします。第 3 章では、力学モデルを UdonSharp で実装する際に必要だった工夫の、特に中心力について紹介します。

中心力

力学モデルを実装する際に、単純に斥力と引力を計算するだけでは、接続されていない頂点が無限に外側へ飛び出してしまう問題がありました。そこで、グラフの中心に向かう引力、いわゆる中心力を追加しました。

中心力を計算するためには、以下のステップを踏みます。

  1. 各頂点から中心(原点)へのベクトルを計算します。
  2. 中心力の強さ(kCenter)を用いて、中心への引力を計算します。
  3. 既存の力(斥力と引力)に中心力を加算します。

具体的な計算は次の通りです。

  • kCenter:中心力の強さを示す定数
  • point:各頂点の現在の座標
  • forces:これまでに計算された力の合計
float centerDelta = 0 - point
float centerAttractiveForce = point.Length / kCenter * centerDelta

forces = forces + centerAttractiveForce // 既存の力に反映

これで、無限に外側へ飛んで行かずに済みます。

次回予告

次回は軽量化のためのマルチスレッド処理について扱います。


バックリンク

ネットワーク

site_graph 20241209-develop-index 🔧技術 - インデックス 20250212-philosophy-dialog-event-by-usable-udon-gimmick-made-story-conclusion 哲学対話イベントで使える Udon ギミックを作った話 まとめ 20241209-develop-index->20250212-philosophy-dialog-event-by-usable-udon-gimmick-made-story-conclusion 20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-1-concept 哲学対話イベントで使える Udon ギミックを作った話 #1 - コンセプト 20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-2 哲学対話イベントで使える Udon ギミックを作った話 #2 - 力学モデル 20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-3 哲学対話イベントで使える Udon ギミックを作った話 #3 - 中心力 20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-4 哲学対話イベントで使える Udon ギミックを作った話 #4 - マルチスレッド 20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-5 哲学対話イベントで使える Udon ギミックを作った話 #5 - ランダムスキップ 20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-6 哲学対話イベントで使える Udon ギミックを作った話 #6 - キャリー付き乗算 20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-7 哲学対話イベントで使える Udon ギミックを作った話 #7 - グリッド処理と近傍探索 20250212-philosophy-dialog-event-by-usable-udon-gimmick-made-story-conclusion->20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-1-concept 20250212-philosophy-dialog-event-by-usable-udon-gimmick-made-story-conclusion->20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-2 20250212-philosophy-dialog-event-by-usable-udon-gimmick-made-story-conclusion->20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-3 20250212-philosophy-dialog-event-by-usable-udon-gimmick-made-story-conclusion->20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-4 20250212-philosophy-dialog-event-by-usable-udon-gimmick-made-story-conclusion->20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-5 20250212-philosophy-dialog-event-by-usable-udon-gimmick-made-story-conclusion->20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-6 20250212-philosophy-dialog-event-by-usable-udon-gimmick-made-story-conclusion->20250202-philosophy-dialog-event-by-usable-udon-gimmick-made-story-7