return (u1, u2) friction = .999 deltaTime = .00525 while True: time.sleep(deltaTime) for e in entities: e.update(deltaTime) # cir.velocity *= friction # rect.velocity *= friction for i in range(0, len(entities)): for j in range(i + 1, len(entities)): e1 = entities[i] e2 = entities[j] mtv = cd.testCollisionSAT(e1, e2) if mtv: e1.pos += mtv * e1.inverseMass e2.pos -= mtv * e2.inverseMass dur = mtv.getNormalized() v1, v2 = solve(e1, e2) e1.velocity = v1.getReflection(dur) * e1.inverseMass e2.velocity = v2.getReflection(-dur) * e2.inverseMass renderer.renderAll() root.update()