我想創建一些physx到遊戲,我從一個小例子開始瞭解它是如何工作的。在這期間,我遇到了一些問題,但我解決了他們的90%。Verlet/Euler積分不準確
爲了創建我的例子,我研究了一些其他的例子,並創建了一個我用過的代碼:codeflow.org/entries/2010/aug/28/integration-by-example-euler-vs-verlet-vs-runge-kutta/
在第一 - 這是髒和低效代碼,只有一樣東西我感興趣的兩個問題:
#1有「時間步長」循環創建精確的橢圓形,但如果我移動1對象(第二個是靜態的),例如steps = 5,橢圓是精確的,但是如果兩個對象都是動態的,曲線總是不準確的。
但運行步驟= 1我的對象更準確(什麼?)此外,如果1對象是靜態的,我的橢圓幾乎不準確。
planet1.updateVelocity(planet2.position);
planet1.updatePosition();
planet1.repaint();
的jsfiddle例如 1靜態 - http://jsfiddle.net/hnq8eqta/ 變化window.steps(1或5)來測試。
planet1.updateVelocity(planet2.position);
planet2.updateVelocity(planet1.position);
planet1.updatePosition();
planet1.repaint();
planet2.updatePosition();
planet2.repaint();
的jsfiddle例如 2動態 - http://jsfiddle.net/agbhwe9g/ 變化太步驟。
#2我認爲這不是正常行爲 - 如果1個對象有更大的初始向量,則兩個對象軌跡都是werid,並且它們離開屏幕。這個算法是正常的嗎?我們可以在這裏做的非常相似模擬: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集成有什麼問題?
是的,我已經找到解決方案,但這是正確的答案。在應用先前的計算之前,計算新位置和加速度無法計算 - 這是計算錯誤。無論如何,謝謝你的關注:) – Griva