我正在尝试找出如何使角色在指定的步数内跳到指定的高度并受到重力的影响。例如,在50个步骤中跳400px。
到目前为止,我可以模拟火箭效果,以使启动速度变慢,但是到50步上升时,它的高度将达到400px,如下所示:
HEIGHT = 400
STEPS = 50
g = 2.0 * HEIGHT / (STEPS * (STEPS - 1))
y = 0
velocity = 0
for index in range(STEPS):
y += velocity
velocity += g
print y, velocity # prints 400.0 16.3265306122
我试过将速度从-16.3265306122开始,并在每个步骤中加上g,但这不会导致y = -400,速度= 0,与您所需要的不同。这样做的结果是y = -416.32653061和速度= 4.49112969036e-11。
您怎么看?
答案 0 :(得分:1)
当您增加y(高度)时,您将从速度开始凝视为零,因此第一步的y值为零。
当您从y = 0开始且速度为-16.3265306122时,第一步是行驶16.32653061,这就是差异。
尝试使用g的负值代替负速度。 (下来时,您应该对自己的上升感到消极。)
答案 1 :(得分:1)
在第一次运行中,您将使用每个步骤中速度实际具有的最小值估算随时间的速度积分。然后,将从velocity += g
获得的速度的最后一个值打印出来,但从未在积分中使用。因此,从另一种角度出发,您可以从速度-16开始,该速度是实际使用的最后一个值(最后一个值)之前的值。这样将得到-400 0.326530612245
,第二个数字,即新的最后一个速度,也不再在积分中使用,而是g
的值。因此,您可以简单地修改代码以不打印出未使用的最后速度:
for index in range(STEPS):
y += velocity
used_velocity = velocity
velocity += g
print y, used_velocity