Gafferon Gamesには、物理シミュレーションを構築するためのRK4統合に関する優れた記事があり、ここにあります:統合の基本
個人的には、私の数学と物理学の知識で改善を利用できます。私はベクトル数学、トリガー、いくつかの統計(ソフトウェアに線形回帰式を使用する必要がありました)などの領域と、基本的に高校レベルから大学1年生までのほとんどの領域で快適です。
質問に答えて、私はこの記事を読み、関連するソースをダウンロードし、1行ずつデバッグして、何が起こっているのかを理解しようとしましたが、それでも私が見ているものを明確に取得していないように感じています。私はインターネットを検索して「For Dummies」バージョンを見つけようとしましたが、正直言って少し違った方法で学習し、暗記に重点を置いて数式をじっと見つめていると、何が起こっているのかを理解する必要があるので、それを削減するつもりはありません。柔軟に適用できます。
これが私がこれまでに理解したことだと思いますが、他の誰かが私を明確にしたり完全に修正したりできることを願っています。RK4はオイラーステップを使用し、それを基に時間を進めて、より基本的にいくつかのオイラーステップ(?)を計算し、加重和を使用して次のフレームの最適な位置と速度を決定しますか?
さらに、その加速方法(AS3に変換):
private function acceleration(state:State, time:Number):Number
{
const k:int = 10;
const b:int = 1;
return - k*state.x - b*state.v;
}
一定の質量(10)と力(1)をとりますか?そして、奇妙な計算を返します。なぜかわかりません...-質量*位置-力*速度?何?
次に、私の最後の混乱のために、(AS3)のような評価メソッドで:
private function evaluateD(initial:State, time:Number, dtime:Number, d:Derivative):Derivative
{
var state:State = new State();
state.x = initial.x + d.dx*dtime;
state.v = initial.v + d.dv*dtime;
var output:Derivative = new Derivative();
output.dx = state.v;
output.dv = acceleration(state, time+dtime);
return output;
}
タイムステップで新しい状態を保存し、次に微分を返すように設定します...これは近似プロセスで使用されているので、これはある程度理解していますが、これは何ですか!:
output.dx = state.v;
output.dv = acceleration(state, time+dtime);
// ok I get we are getting the new velocity since v = a * t, obviously I
// don't what acceleration() is returning though.
位置の微分出力変化を州の新しい速度に設定しますか?えっ?
最後に、このテストシミュレーションは次のように実行されます。
var state:State = new State();
state.x = 100;
state.v = 0;
t = 0;
dt = 0.1;
while (Math.abs(state.x)>0.001 || Math.abs(state.v)>0.001)
{
trace(state.x, state.v);
integrate(state, t, dt);
t += dt;
}
では、位置の値が100、速度が0の新しい状態を設定していますか?速度がない場合、このシミュレーションのポイントは...
とにかく、言うまでもなく私はかなり混乱していて、惑星地球から漂流しました。誰かがそこにいることを願って、これが私のために明確になることを願っています。