ブレンダーがニュートンの方程式の使用について書いていることに加えて、「加速場」をどのように統合するかを考慮する必要があります (彼の回答へのコメントでそれを呼び出します)。
最も簡単な方法は、オイラー法を使用することです。それに関する問題は、急速に発散することですが、コーディングが簡単で、適度に高速であるという利点があります。
より良い精度を求めており、いくらかのパフォーマンスを犠牲にしても構わないと思っている場合は、通常、ルンゲクッタ法の 1 つ(おそらく RK4) が適しています。「加速フィールド」が動的である場合 (つまり、時間の経過とともに変化する...おそらく惑星が軌道を移動する結果として)、RK4 は課題になることに注意してください。
更新(以下のコメント/質問に基づく):
特定のオブジェクトiに適用されるあるタイム ステップ t nでの力ベクトルF i (t n )を計算する場合は、Blender が参照する方程式を使用して、シミュレーション内の他のすべてのオブジェクトによって寄与される力を計算する必要があります。つまり、各オブジェクトiについて、他のすべてのオブジェクトがどのように引っ張る (力を適用する) かを把握し、これらのベクトルを合計すると、iに適用される総力ベクトルになります。アルゴリズム的には、これは次のようになります。
各オブジェクトについてi
F i (t n ) = 0
各オブジェクトj ≠ i
F i (t n ) = F i (t n ) + G * m i * m j / | p i (t n ) - p j (t n )| 2
ここで、p i (t n ) とp j (t n ) は、それぞれ時刻 t nにおけるオブジェクトiとjの位置であり、| | | は、標準のユークリッド ( l 2 ) 法線です。つまり、2 つのオブジェクト間のユークリッド距離です。また、G は重力定数です。
オイラー法は、シミュレーションを離散時間スライスに分割します。現在の状態を見て、あなたの例の場合、シミュレーション内のすべてのオブジェクトに集約して適用されたすべての力を考慮し、それらの力をタイムスライスの期間にわたって定数として適用します。使用時
a i (t n ) = F i (t n )/m i
( a i (t n ) = 時刻 t nでオブジェクトiに適用される加速度ベクトル、F i (t n ) は時刻 t nでオブジェクトiに適用される力ベクトル、 m iはオブジェクトiの質量)、力ベクトル (したがって加速度ベクトル) は、タイム スライスの間、一定に保たれます。あなたの場合、実際に加速度を計算する別の方法がある場合は、力を計算する必要はなく、代わりに加速度を直接計算できます。いずれにしても、加速度を一定にすると、時刻 t n+1での位置は、オブジェクトのp (t n+1 ) と時間 t n+1での速度v (t n+1 ) は、次の式で与えられます。
p i (t n+1 ) = 0.5* a i (t n )*(t n+1 -t n ) 2 + v i (t n )*(t n+1 -t n )+ p i (t n )
v i (t n+1 ) = a i (t n+1 )*(t n+1 -t n ) + v i (t n )
RK4 メソッドは、システムのドライバーを 2 次多項式に適合させ、その動作をより適切に近似します。詳細は、上記で参照したウィキペディアのサイトにあり、Web 上には他にも多くのリソースがあります。基本的な考え方は、特定のタイムスライスに対して 1 つの力の値を選択する代わりに、特定の時間に 4 つの力ベクトルを計算し、力ベクトルを 2 次多項式に適合させるというものです。タイム スライス間で力場ベクトルが変化しない場合は問題ありません。重力を使用してベクトル フィールドを導出し、重力源であるオブジェクトが移動する場合、力ベクトルを計算するために、4 つのサブ間隔のそれぞれで位置を計算する必要があります。それはできる、ただし、パフォーマンスはオイラー法を使用するよりもかなり悪くなります。プラス面としては、オブジェクト間の相対的な動きがより正確になります。したがって、計算コストが高いという意味での課題であり、反復のタイム スライス中に 4 つのサンプルのすべてのオブジェクトがどこにあると想定されているかを把握するのは少し面倒です。