我试着让我的程序中的球互相弹跳,但没有成功,大多数时候只是出了问题。 以下是我的main的源代码:
from tkinter import *
from Ball import *
import time
HEIGHT = 500
WIDTH = 500
window = Tk()
canvas = Canvas(window,height=HEIGHT,width = WIDTH)
canvas.pack()
basket_ball = Ball(canvas,0,0,100,1,1,"orange")
soccer_ball = Ball(canvas,399,399,499,1,1,"black")
while True:
basket_ball_coords = canvas.coords(basket_ball.image)
soccer_ball_coords = canvas.coords(soccer_ball.image)
basket_ball.move()
soccer_ball.move()
print (basket_ball_coords)
print (soccer_ball_coords)
if basket_ball_coords[2] == soccer_ball_coords[0] and ((soccer_ball_coords[3] - basket_ball_coords[3])<= 100 and (soccer_ball_coords[3] - basket_ball_coords[3])> -101):
basket_ball.xVelo = -basket_ball.xVelo
soccer_ball.xVelo = -soccer_ball.xVelo
if basket_ball_coords[3] == soccer_ball_coords[1] and ((soccer_ball_coords[2]- basket_ball_coords[2]<=100)and (soccer_ball_coords[2] - basket_ball_coords[2])> -101):
basket_ball.yVelo = -basket_ball.yVelo
soccer_ball.yVelo = -soccer_ball.yVelo
if basket_ball_coords[0] == soccer_ball_coords[2] and ((soccer_ball_coords[3] - basket_ball_coords[3]) <= 100 and (soccer_ball_coords[3] - basket_ball_coords[3]) > -101):
basket_ball.xVelo = -basket_ball.xVelo
soccer_ball.xVelo = -soccer_ball.xVelo
if basket_ball_coords[1] == soccer_ball_coords[3] and ((soccer_ball_coords[2]- basket_ball_coords[2]<=100)and (soccer_ball_coords[2] - basket_ball_coords[2])> -101):
basket_ball.yVelo = -basket_ball.yVelo
soccer_ball.yVelo = -soccer_ball.yVelo
window.update()
time.sleep(0.01)
window.mainloop()
这是我用来创建Ball对象的Ball类
class Ball:
def __init__ (self,canvas,x,y,diameter,xVelo,yVelo,color):
self.canvas = canvas
self.image = canvas.create_oval(x,y,diameter,diameter,fill=color)
self.xVelo = xVelo
self.yVelo = yVelo
def move(self):
coordinates = self.canvas.coords(self.image)
if (coordinates[2] >= self.canvas.winfo_width() or coordinates[0] < 0):
self.xVelo = -self.xVelo
if (coordinates[3] >= self.canvas.winfo_height() or coordinates[1] < 0):
self.yVelo = -self.yVelo
self.canvas.move(self.image,self.xVelo,self.yVelo)
如果球中心之间的距离小于其半径之和,则球会“反弹”
毕达哥拉斯定理说,距离是x和y三角洲平方和的平方根
假设:
加入班级舞会:
编辑以添加:
球碰撞时会发生什么情况取决于每个球的位置 速度矢量和质量,大概还有碰撞的偏移角
以下是两个在线示例,其源代码有效:
Python(和Matplotlib)球体碰撞模拟
https://scipython.com/blog/two-dimensional-collisions/
关于弹性碰撞的维基百科页面引用了此页面
https://www.vobarian.com/collisions/index.html
其中还包括一个简短的PDF,讨论该理论 作为源代码和二进制代码,用于模拟球碰撞的Windows C++程序。p>
相关问题 更多 >
编程相关推荐