首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的非弹性碰撞

Python中的非弹性碰撞
EN

Stack Overflow用户
提问于 2020-04-06 21:45:35
回答 1查看 273关注 0票数 2

这是我在这里的第一篇帖子。我正在努力学习python代码。我制作了一个程序,使用海龟模块,模拟一个弹跳球遭受非弹性碰撞,以使最大高度的反弹每次减少。它工作得很好,直到球在很短的高度上弹跳,并停止弹跳,使球以恒定(小)的速度向下移动--这显然不是人们所期望的。

“地板”是y = -100坐标处的一条线。

我的迭代代码如下:

代码语言:javascript
复制
while t < 5000:
    vy += g
    h += vy
    corpo.goto(0, h)

    if h <= -100 and g == 0:
        vy = 0
        h = -100
        g = 0
    if abs(vy) <= 0.000000000000000000001 and h <= -100:
        vy = 0
        g = 0
        h = -100
    elif h <= -100 and vy < 0:
        vy = -vy * 0.75

    print(vy)

    t += dt 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-07 03:40:31

问题是,你的完成条件永远不会满足,可能是因为你在速度上加了一个加速度(假设g是指重力,如果它不是,你应该考虑给它取一个不同的名字)。另一个问题是,即使进行了修正,只有当abs(vy) <= 0.000000000000000000001g * dt小于0.000000000000000000001 / 0.75时,才能满足您的完成条件,否则vy永远不会足够小。

解决后一个问题的方法有两种,您可以将完成条件缩放到g * dt,即

代码语言:javascript
复制
if abs(vy) <= abs(g * dt) and h <= -100:
    # ...

或者,当h <= -100关闭重力时,稍微提高阈值,即

代码语言:javascript
复制
t = 0
dt = 0.0001
vy = 0
h = 0
g = -5
while t < 500:
    if h <= -100 and g == 0:
        vy = 0
        h = -100
        g = 0
        break
    if abs(vy) <= 0.0001 and h <= -100:
        vy = 0
        g = 0
        h = -100
    elif h <= -100 and vy < 0:
        vy = -vy * 0.75
    elif h > -100:
        vy += g * dt

    h += vy
    print(h, vy)

    t += dt 

在前一种情况下,收敛性得到保证(球停止),而在后一种情况下不收敛(它可能无限振荡)。由于前者保证了趋同,因此它通常更可取--但并不完全现实。

不过,最现实的解决办法是将两者结合起来,即

代码语言:javascript
复制
t = 0
dt = 0.001
vy = 0
h = 0
g = -9.81
while t < 500:
    if h <= -100 and g == 0:
        vy = 0
        h = -100
        g = 0
        break
    if abs(vy) <= abs(g * dt)*2 and h <= -100:
        vy = 0
        g = 0
        h = -100
    elif h <= -100 and vy < 0:
        vy = -vy * 0.75
    elif h > -100:
        vy += g * dt

    h += vy
    print(h, vy)

    t += dt 

请注意,时间步骤dt的某些值不会发生收敛--如果遇到这种情况,则应该调整完成条件的缩放或时间步骤。

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

https://stackoverflow.com/questions/61069453

复制
相关文章

相似问题

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