简单的弹跳计算出错

Simple bouncing calculations going wrong

我正在努力学习 python 以便我可以玩弄数学。我一直在尝试用最少的物理实现一个非常简单的弹跳物体模拟,但它似乎无法正常工作。计算应该给我一个波浪模式,但由于某种原因,数字不断减少。这是 Python 中发生的某种数学神器吗?根据我的理解,数字没有理由减少,因为我只使用非常简单的算术。

import sys, pygame

velocity = 0
acceleration = 0.1
ycord = 50

while 1:

    pygame.time.Clock().tick(10)

    velocity -= acceleration
    ycord += velocity

    if ycord <= 0:
    velocity *= -1

    print (ycord)

发生这种情况是因为速度仅在 ycord 变为负值后才反转。 要更改此行为,您必须计算 ycord 达到零时的速度并更改符号。 或者简单地说,选择一个更好的起点 ycord,这样球正好到达 0 并且永远不会进入负值范围。 我认为如果您将初始 ycord 更改为 52.8,您会看到不同。

就物理学而言,您正在模拟阻尼效果,因为球在从负值 ycord 变为 0 的过程中正在失去能量。因此,当 ycord 变为零时,它开始时的速度小于当它越过零时它就这样做了。