微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pygame弹性碰撞和重力模拟错误

如何解决pygame弹性碰撞和重力模拟错误

我做了一个模拟来计算行星之间的弹性碰撞和重力。
一开始还好,但随着我们继续下去,对称性在某些时候会崩溃。 Here is the Video(1:40 休息)
我尝试了很多代码,但对称性最终被打破。

这是弹性碰撞代码

@staticmethod
def reflect_colliding_circles(a,b):
    delta = vector(a.rect.center[0],a.rect.center[1]) - vector(b.rect.center[0],b.rect.center[1])
    d = delta.length()
    mtd = delta * ((a.radius+b.radius)-d)/d

    im1 = 1 / a.m
    im2 = 1 / b.m

    a.pos += mtd * (im1 / (im1 + im2))
    b.pos -= mtd * (im2 / (im1 + im2))

    v = a.vel - b.vel
    vn = v.dot(mtd.normalize())
    if vn > 0.0:
        return

    i = (-1 * (1.0 + E) * vn) / (im1 + im2)
    impulse = mtd.normalize() * i

    a.vel += impulse * im1
    b.vel -= impulse * im2

这里是重力代码

def calc_gravity(self,otpl):
    force = self.pos - otpl.pos
    if force == vector(0,0):
        return vector(0,0)
    distance = force.magnitude()
    force = force.normalize()
    strength = -(G * self.m * otpl.m) / (distance ** 2)
    force = force * strength
    return force

完整代码here
为什么会发生以及如何解决
我想可能是浮动的精度错误,这只是我的猜测..
谢谢!
(对不起,我的英语不好,我用了一点翻译..)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。