首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用不同的时间步骤再现重力物理结果

用不同的时间步骤再现重力物理结果
EN

Stack Overflow用户
提问于 2012-03-01 02:07:34
回答 1查看 276关注 0票数 2

我正在写一个基于物理的游戏,其中有行星与引力作用在各种物体上,如导弹。(使用Farseer物理引擎)

对于主要的游戏,我使用一个固定时间步长的单一物理模拟。这一切都很好,工作得很漂亮。

问题出在这里。我正在使用第二个物理模拟器和更大的时间步长,以投射某些抛射路径到未来。基本上是一个平行的宇宙,包含行星和其他静态的重力产生实体(因为我在实时地进行这些投影模拟,它需要更快,因此更大的时间步幅)。

结果略有不同。

下面是每个时间步骤执行的基本代码:

代码语言:javascript
复制
 Vector2 force = GravityStrength / centerToCenterDist.LengthSquared() /  Math.Sqrt(centerToCenterDist.LengthSquared()) * body1.Mass * body2.Mass * centerToCenterDist;

//GravityStrength is in addition to the Mass calculations

我的平行宇宙时间步目前是(5.0 *时间步)。

我试图通过改变结果来纠正不同的结果:

代码语言:javascript
复制
force = (force * (timestep+1))

我的问题:在并行模拟器中可以使用不同的时间步骤复制主模拟器的结果吗?

我的数学不是很好,所以我很难想出可能的解决办法。我猜这是不可能的,因为所涉及的非线性方程。

如果是这样的话,是否有一个相当准确的方法来获得接近的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-01 02:29:36

这是一个数学问题,而不是物理问题,但答案是否定的。模拟(任何模拟)都是近似的,并且高度依赖于几个变量。

在这种情况下,它看起来像是一个基本的欧拉法模拟。您所看到的是两种模拟在全局截断误差上的不同--换句话说,每一种模拟都具有固有的、发散的错误特性。

例如,在“近进”情况下,您应该会看到更多不同的模拟(当两个物体明显偏转时,误差将更大)。您将无法更正它,因为更正将是更复杂的(即所需的计算能力)比两种模式的总和。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9509639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档