我有一個程序爲我的當前臺球模擬編寫簡單的2D碰撞檢測和處理,但是它是垃圾,我正在尋找一個涉及適當物理的解決方案,即牛頓運動定律coliisions。我有什麼,到目前爲止,它不conserverve勢頭,並簡化了物理是需要在Python中進行2D碰撞處理的解決方案
def collide(ball1,ball2):
dx = ball1.x - ball2.x
dy = ball1.y - ball2.y
dist = (dx)**2+(dy)**2
if dist < (ball1.radius + ball2.radius)**2:
tangent = atan2(dy, dx)
angle = 0.5 * pi + tangent
angle1 = 2*tangent - ball1.angle
angle2 = 2*tangent - ball2.angle
speed1 = ball2.speed*e
speed2 = ball1.speed*e
(ball1.angle, ball1.speed) = (angle1, speed1)
(ball2.angle, ball2.speed) = (angle2, speed2)
ball1.x += sin(angle)
ball1.y -= cos(angle)
ball2.x -= sin(angle)
ball2.y += cos(angle)
和我有什麼運行的碰撞是這樣的,這裏的反彈()是撞到牆上
running = True
while running:
background()
for i,ball in enumerate(balls,1):
ball.bounce()
ball.move()
for ball2 in balls[i:]:
collide(ball,ball2)
ball.display()
pygame.display.flip()
我仍然很新,所以請改變什麼是無用/愚蠢
你是否在尋找能夠爲你做2D衝突(或者至少簡化事情)的庫的建議,或者你是否因爲教育原因而從頭開始編寫這些建議(在這種情況下,你仍然可能想要查看庫源代碼) – Foon
將出於教育原因,這將是一件好事,從頭開始寫,但我有點新,所以我不知道從哪裏開始。如果有好的圖書館,請在那裏指出我的感謝 – user1998184