我想为游戏创建一些 physx,我从小例子开始了解它是如何工作的。在此期间,我遇到了一些问题,但我解决了 90%。
为了创建我的示例,我研究了一些其他示例并创建了我使用的示例:codeflow.org/entries/2010/aug/28/integration-by-example-euler-vs-verlet-vs-runge-kutta/
起初 - 这是肮脏和低效的代码,我只对两个问题感兴趣:
#1有“时间步长”循环来创建准确的椭圆,但是如果我移动 1 个对象(第二个是静态的),例如步骤 = 5,椭圆是准确的,但如果两个对象都是动态的,曲线完全不准确。
但是以 step = 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 集成有什么问题?