ゲーム用のいくつかの physx を作成したいので、それがどのように機能するかを理解するために小さな例から始めました。この間、いくつかの問題がありましたが、90% で解決しました。
私の例を作成するために、私はいくつかの他の例を研究し、これを作成するために私が使用した例を作成しました: codeflow.org/entries/2010/aug/28/integration-by-example-euler-vs-verlet-vs-runge-kutta/
最初は - これは汚れていて非効率的なコードです。2 つの問題に関心があるのは 1 つだけです。
#1正確な楕円を作成するための「タイムステップ」ループがありますが、たとえばステップ= 5で1つのオブジェクト(2番目は静的)を移動すると、楕円は正確ですが、両方のオブジェクトが動的である場合、曲線は完全に不正確になります。
しかし、ステップ = 1 で実行すると、オブジェクトがより正確になります (何?) さらに、1 つのオブジェクトが静的である場合、楕円は少し不正確になります。
planet1.updateVelocity(planet2.position);
planet1.updatePosition();
planet1.repaint();
1 つの静的なjsfiddle の例- http://jsfiddle.net/hnq8eqta/ window.steps (1 または 5) を変更してテストします。
planet1.updateVelocity(planet2.position);
planet2.updateVelocity(planet1.position);
planet1.updatePosition();
planet1.repaint();
planet2.updatePosition();
planet2.repaint();
2 つの動的なjsfiddle の例- http://jsfiddle.net/agbhwe9g/ 変更手順も。
#2これは通常の動作ではないと思います。1 つのオブジェクトの初期ベクトルが大きい場合、両方のオブジェクトの軌道がおかしくなり、画面から逃げてしまいます。このアルゴリズムは正常ですか?ここで非常によく似たシミュレーションを行うことができます: phet.colorado.edu/sims/my-solar-system/my-solar-system_en.html ですが、これは同じではありません...
window.planet1 = new Planet("planet1",250,350,0,1);
window.planet2 = new Planet("planet2",550,250,0,-1);
//changed to
window.planet1 = new Planet("planet1",250,350,0,1);
window.planet2 = new Planet("planet2",550,250,0,-2);
例- jsfiddle.net/hr1ebq3c/
verlet 統合の何が問題になっていますか?