【发布时间】:2020-11-12 19:45:13
【问题描述】:
我最初使用标准运动方程对我的模拟进行了编码,但众所周知,它最终变得非常不稳定,即使它在技术上有效。
如果我们将 x(t) 作为运动方程的位置函数,我通过重构 x(t+delta) 来计算我在模拟中的“下一个”位置,如下所示:
x(t+delta) = x(t) + (1/2)*a*delta^2 + a*t*delta
t = t + delta
最重要的是,a 被计算为 NetForce/Mass。如果我的系统/粒子遇到碰撞,法向力会以这样的方式影响净力,使其在碰撞轴上为 0(即,如果它落在地面上,重力正在向下拉,地板的法向力取消重力)。 到目前为止,这对任何类型的碰撞都非常有效。
但是,我决定切换到 Verlet 集成,因为众所周知它更稳定,并且由于某种原因,它完全忽略了碰撞。我使用以下公式:
x(t+delta) = x(t) + v(t) * delta + .5*a(t)*delta^2
v(t+delta) = v(t) + .5 * (a(t) + a(t+delta)) * delta
a(t+delta) = NetForce / Mass
t = t + delta
其中 v(0)=0,a(0)=0。因此,除了旧位置之外,我还存储旧的加速度和速度。 但是,我遇到了上述问题:它无法正常工作,因为它忽略了碰撞。即使它应该已经被考虑到加速度中......
我应该如何处理这个问题?
【问题讨论】:
标签: simulation physics numerical-methods