
傾斜地における球体の物理演算実装プロンプト集
物理演算エンジンでの球体の挙動再現に必要なプロンプト、コード、検証手法を網羅した実用的な技術資料です。
傾斜地を転がる球体の挙動を物理演算エンジンで再現するための、プロンプト、コードスニペット、および検証フレームワークを以下にまとめる。本資料は、Unity (PhysX)、Unreal Engine (Chaos)、あるいはPythonを用いた数値計算シミュレーションの構築に活用することを目的とする。 ### 1. 物理パラメータ設定用プロンプト AIエンジンに対して、シミュレーションの初期条件を定義させるためのプロンプト。 「以下の条件に基づき、傾斜地を転がる球体の物理パラメータ(質量、慣性モーメント、摩擦係数、傾斜角)を算出せよ。 - 目的:球体が滑らずに転がる(純粋な転がり運動)条件を維持すること。 - 入力変数: 1. 傾斜角度 θ(度) 2. 球体の半径 r (m) 3. 球体の質量 m (kg) 4. 重力加速度 g = 9.81 (m/s^2) - 出力要求: - 必要な静摩擦係数 μ の最小値 - 並進加速度 a および角加速度 α の導出式 - 転がり抵抗を考慮した減衰係数(もしあれば)」 ### 2. Unity (C#) 物理挙動最適化スクリプト PhysXエンジンのデフォルト設定では、球体の挙動が不自然になる場合がある。特に転がり摩擦と慣性の調整に用いるコードスニペット。 ```csharp using UnityEngine; public class RollingSpherePhysics : MonoBehaviour { public float slopeAngle = 30f; // 傾斜角 public PhysicMaterial spherePhysicMaterial; private Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); // 慣性テンソルの手動設定:球体の慣性モーメント I = 2/5 * m * r^2 rb.inertiaTensor = new Vector3(0.4f, 0.4f, 0.4f) * rb.mass * Mathf.Pow(GetComponent<SphereCollider>().radius, 2); // 摩擦設定:PhysicMaterialのDynamicFrictionとStaticFrictionを調整 spherePhysicMaterial.dynamicFriction = 0.6f; spherePhysicMaterial.staticFriction = 0.6f; spherePhysicMaterial.frictionCombine = PhysicMaterialCombine.Maximum; } void FixedUpdate() { // 傾斜方向に重力成分を反映させるための補助トルク float forceMagnitude = rb.mass * 9.81f * Mathf.Sin(slopeAngle * Mathf.Deg2Rad); rb.AddForce(transform.forward * forceMagnitude, ForceMode.Force); } } ``` ### 3. 数値シミュレーション検証フレームワーク(Python用) 物理演算が正しく行われているかを検証するための微分方程式ソルバーの雛形。 「以下のPythonスクリプトを用いて、傾斜地上の球体の運動方程式を数値積分し、時刻tにおける位置と速度のリストを出力せよ。 - 使用ライブラリ:NumPy, SciPy (odeint) - 運動方程式: - 加速度 a = (g * sinθ) / (1 + I/mr^2) - 速度 v(t) = a * t - 位置 x(t) = 0.5 * a * t^2 - 拡張要求:空気抵抗(F = -kv)を加えた場合の挙動との比較データを作成せよ。」 ```python import numpy as np from scipy.integrate import odeint def model(y, t, theta, k): # y[0] = 位置, y[1] = 速度 # k = 空気抵抗係数 g = 9.81 a = (g * np.sin(np.radians(theta))) / 1.4 # I = 2/5mr^2 dydt = [y[1], a - k * y[1]] return dydt # 初期条件 y0 = [0, 0] t = np.linspace(0, 10, 100) # 計算実行 solution = odeint(model, y0, t, args=(30, 0.1)) ``` ### 4. 物理エンジンチューニング用チェックリスト AIモデルに物理挙動の「正しさ」をレビューさせるための指示文セット。 1. **エネルギー保存則の確認**: 「全エネルギー(運動エネルギー + 回転エネルギー + ポテンシャルエネルギー)が、摩擦損失を除いて一定に保たれているか確認せよ。」 2. **スリップ判定**: 「球体の中心速度 v と角速度 ω の関係が v = rω を満たしているか。満たしていない場合、摩擦係数が不足している原因を特定せよ。」 3. **地形のポリゴン精度**: 「メッシュコライダーの解像度が、球体の挙動に与える影響を評価せよ。角張った地形が回転に及ぼすトルクの不連続性を補正する方法を提示せよ。」 4. **摩擦の境界条件**: 「傾斜角が臨界角(tanθ > μ)を超えた際、滑り摩擦から転がり摩擦への遷移が物理的に破綻していないか論理チェックせよ。」 ### 5. 応用:地形の動的適応プロンプト 「地形の起伏を力学的な構造体として解析し、球体が通過する際の『地形的抵抗』を算出するアルゴリズムを構築せよ。地形をグリッド化し、各グリッドの勾配成分(gradient)を法線ベクトルから抽出し、球体の進行方向ベクトルとの内積を計算して、加速・減速の要因をプロットすること。」 ### 6. トラブルシューティング:球体が「浮く」・「跳ねる」場合 「物理演算エンジン上で球体が傾斜面から浮き上がる現象を修正するための設定項目リストを作成せよ。 - 衝突判定の更新頻度(FixedUpdateのステップ幅) - 接触オフセット(Contact Offset)の調整 - 慣性テンソルの再計算タイミング - 剛体コンストレイントの制約条件」 上記のプロンプトおよびコードを組み合わせることで、単純な転がりから、地形の微細な凹凸に反応するリアルな物理挙動までを実装可能である。特に慣性モーメントの計算と摩擦係数の相互関係が、挙動の質を決定づける核となる。理論上の最適化アルゴリズムをコードに落とし込む際は、常にステップ幅と摩擦のバランスを第一に検証せよ。