【发布时间】:2017-09-29 10:50:59
【问题描述】:
作为我正在制作的矢量类/“物理引擎”的一部分,我正在尝试实现速度 verlet 算法来求解牛顿运动方程。但是,我实现的算法正在产生大量值,如下所示。我已经尝试了我自己认为的所有选项,并且想知道是否有人可以提供帮助。谢谢。
Xpos = 0
OldPos = 1
dt = 0.02
Xaccel = 9.81
def doVerletX(currentPos, oldPos, accel, dt):
newPos = (currentPos + (currentPos-oldPos) + (accel*dt*dt))
return newPos
for a in range (1,10,1):
newPos = doVerletX(Xpos,OldPos,dt,Xaccel)
print(newPos)
OldPos = Xpos
dt+=dt
上述代码的输出是:
0.9247220000000003
3.8494440000000005
7.698888000000001
15.397776000000002
30.795552000000004
61.59110400000001
123.18220800000002
246.36441600000003
492.72883200000007
我知道这显然是错误的,想知道如何解决它?
【问题讨论】:
-
dt是 delta t?你为什么要dt+=dt?另外我认为调用函数时您的参数顺序错误。在函数定义中dt是第四个参数,在调用过程中您将dt作为第三个参数传递。