gpt4 book ai didi

javascript - Verlet/Euler 积分不准确

转载 作者:行者123 更新时间:2023-11-30 00:27:15 28 4
gpt4 key购买 nike

我想为游戏创建一些 physx,我从小例子开始了解它是如何工作的。在此期间我遇到了一些问题,但我在 90% 内解决了它们。

为了创建我的示例,我研究了一些其他示例并创建了我使用的示例:codeflow.org/entries/2010/aug/28/integration-by-example-euler-vs-verlet-vs-runge-kutta/

起初 - 这是肮脏且低效的代码,我对两个问题只有一件事感兴趣:

#1 有“timestep”循环来创建准确的椭圆,但如果我移动 1 个对象(第二个是静态的),例如步长 = 5,椭圆是准确的,但如果两个对象都是动态的, 曲线完全不准确。

但是以 steps = 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 个对象具有更大的初始向量,则两个对象的轨迹都是奇怪的并且它们会从屏幕上跑开。这个算法正常吗?我们可以在这里进行非常相似的模拟: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 集成有什么问题?

最佳答案

首先,您使用的不是 Verlet,而是辛欧拉方法。

其次,将耦合系统视为耦合系统至关重要。在这种特殊情况下,这恰好适用于 steps=1steps 的任何其他值或此样式中的 Verlet 实现都会破坏该方法的一致性。

始终同时计算系统所有组件的加速度,而不更新其间的任何位置或速度值。

关于javascript - Verlet/Euler 积分不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30968407/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com