ニュートンの方程式を使用したことについてBlenderが書いていることに加えて、あなたはあなたの「加速フィールド」をどのように統合するかを検討する必要があります。
最も簡単な方法はEuler's Methodです。その問題は急速に発散していますが、コード化が容易で合理的に高速であるという利点があります。
精度を向上させ、パフォーマンスを犠牲にしたい場合は、通常Runge-Kutta methods(おそらくRK4)のいずれかを選択するのが良いでしょう。私はあなたの「加速フィールド」が動的である(つまり、時間の経過とともに変化する、おそらく惑星が軌道を移動した結果として)RK4が挑戦になることに注意します。 (下記のコメント/質問に基づいて)
更新:
あなたには、いくつかの時間ステップtにおける力ベクトルF I(トン N)を計算したい場合は N特定のオブジェクト iに適用された場合、Blenderの参照式を使用して、シミュレーション内の他のすべてのオブジェクトによって与えられた力を計算する必要があります。これはオブジェクトごとに、 iです。他のすべてのオブジェクトがどのように引っ張られるか(力を加える)を計算します。合計したベクトルは、 iに適用されます。アルゴリズム的にこれは次のようになります。
for each object i
Fi(tn) = 0
for each object j ≠ i
Fi(tn) = Fi(tn) + G * mi * mj/|pi(tn)-pj(tn)|2
P私は(トン N)とP J(トン N)は、オブジェクト、iの位置でありますおよびjをそれぞれ時刻t nとし、 |標準ユークリッド(l )である。すなわち、2つのオブジェクト間のユークリッド距離である。また、Gはgravitational constantです。
オイラーの方法は、シミュレーションを離散時間スライスに分割します。現在の状態を確認し、例の場合は、集計されたすべての力をシミュレーション内のすべてのオブジェクトに適用し、それらの力をタイムスライスの期間にわたって定数として適用します。 iは時刻tにおける((T N)=加速度ベクトルをを
ai(tn) = Fi(tn)/mi
を使用する場合 Nは Iをオブジェクトに適用される、F I(T n)は、時刻tでオブジェクト iに適用される力ベクトルです力ベクトル(ひいては加速度ベクトル)は、時間スライスの持続時間にわたって一定に保たれる。別ウィンドウ(タブ)の大きな表示で見るあなたの場合、実際に加速を計算する別の方法がある場合は、力を計算する必要はなく、代わりに加速度を直接計算することもできます。加速とのいずれかのイベントに N + 1、P(T N + 1)及び速度時刻tにおける時刻tで、定数として位置を保持され N + 1、V(T RK4法が良いが、その挙動を近似する2次多項式にシステムのドライバに合っ
pi(tn+1) = 0.5*ai(tn)*(tn+1-tn)2 + vi(tn)*(tn+1-tn)+pi(tn)
vi(tn+1) = ai(tn+1)*(tn+1-tn) + vi(tn)
:オブジェクトの N + 1)は、によって与えられます。詳細は上で参照したウィキペディアのサイトにあります。また、Web上で見つけることができる他の多くのリソースがあります。基本的な考え方は、特定のタイムスライスに対して単一の力値を選択するのではなく、特定の時間に4つの力ベクトルを計算し、力ベクトルを2次多項式に当てはめることです。あなたの力ベクトルのフィールドがタイムスライスの間で変化しないなら、それはいいです。ベクトル場を導出するために重力を使用し、重力源であるオブジェクトが動いている場合は、力ベクトルを計算するために4つの部分間隔のそれぞれでそれらの位置を計算する必要があります。これは可能ですが、オイラーの方法を使用するよりも少しパフォーマンスが悪くなります。プラス面では、オブジェクトの相対的な動きがより正確になります。したがって、計算コストが高いという意味での挑戦です。繰り返しのタイムスライスの間に、4つのサンプルに対してすべてのオブジェクトがどこにあるのか把握するのは苦労します。
「多くの身体の問題」のためのGoogle –