Python性能问题

时间:2012-10-28 20:06:27

标签: python performance

我在这里建立了一个简单的重力模拟:

enter image description here

首先,我使用了一个可变的时间步长,通过计算一次更新所需的时间,并将其应用于下一个 - 标准的东西。

然而,这种方法降低了确定性,结果可能因模拟而异 - 我绝对不想要。

我认为我应该使用一个固定的时间步长(10秒),但后来我注意到模拟会定期(大约1秒)加速和减速。

为什么会这样?是否必须对Python本身做任何事情?


代码

主循环:

while run:
    uni.update(10)

    for event in pygame.event.get():
        if event.type == QUIT:
            run = False

更新方法:

def update (self, dt):
    self.time += dt

    for b1, b2 in combinations(self.bodies.values(), 2):
        fg = self.Fg(b1, b2)

        if b1.position.x > b2.position.x:
            b1.force.x -= fg.x
            b2.force.x += fg.x
        else:
            b1.force.x += fg.x
            b2.force.x -= fg.x


        if b1.position.y > b2.position.y:
            b1.force.y -= fg.y
            b2.force.y += fg.y
        else:
            b1.force.y += fg.y
            b2.force.y -= fg.y


    for b in self.bodies.itervalues():
        ax = b.force.x/b.m
        ay = b.force.y/b.m

        b.position.x += b.velocity.x*dt
        b.position.y += b.velocity.y*dt

        nvx = ax*dt
        nvy = ay*dt

        b.position.x += 0.5*nvx*dt
        b.position.y += 0.5*nvy*dt

        b.velocity.x += nvx
        b.velocity.y += nvy

        b.force.x = 0
        b.force.y = 0

0 个答案:

没有答案