टिंकर से जुड़े एक छोटे से प्रोजेक्ट पर काम करना और मुझे यह पता लगाने की ज़रूरत है कि गेंदों को एक-दूसरे से कैसे उछालना है।

यहाँ कोड है:

from tkinter import *

# dimensions of canvas
WIDTH=300
HEIGHT=400

# Create window and canvas
window = Tk()
canvas = Canvas(window, width=WIDTH, height=HEIGHT, bg='#ADF6BE')
canvas.pack()

# starting position of ball
x = 0
y = 10
# starting position of ball1
x1 = 100
y1 = 0

# distance moved each time step for ball 1
dx = 10
dy= 10
# distance moved each time step for ball 2
dx1 = 10
dy1 = 10

# diameter of ball
ballsize = 30


while True:
   x = x + dx
   y = y + dy
   x1 = x1 + dx1
   y1 = y1 + dy1

   # if ball get to edge then we need to
   # change direction of movement
   if x >= WIDTH-ballsize or x <= 0 or x == x1:
      dx = -dx
      print("x=", x)
      print('y=', y)
   if y >= HEIGHT-ballsize or y <= 0 or y == y1:
      dy = -dy
      print("x=", x)
      print('y=', y)

   if x1 >= WIDTH-ballsize or x1 <= 0 or x1 == x:
      dx1 = -dx1
      print("x1=", x1)
      print('y1=', y1)
   if y1 >= HEIGHT-ballsize or y1 <= 0 or y1 == y:
      dy1 = -dy1
      print("x1=", x1)
      print('y1=', y1)


   # Create balls
   ball=canvas.create_oval(x, y, x+ballsize, y+ballsize, fill="white", outline='white')
   ball1 = canvas.create_oval(x1, y1, x1 + ballsize, y1 + ballsize, fill="white", outline='white')
   # display ball
   canvas.update()
   canvas.after(50)
   #remove ball
   canvas.delete(ball)
   canvas.delete(ball1)

window.mainloop()

वे चलते हैं और कैनवास की दीवारों से उछलते हैं लेकिन एक दूसरे से दूर नहीं होते हैं।

एक दूसरे को मारने और उछलने के बजाय, मेरा मतलब दिखाने के लिए एक छवि यहां दी गई है

Balls not colliding

0
Adam A. 8 सितंबर 2021, 06:33
मैं दीवारों का पता लगाने के लिए आपका कोड देखता हूं, लेकिन अन्य गेंदों का पता लगाने के लिए कुछ भी नहीं देखता। बस इसे उसी जगह पर जोड़ें। मैं आपको इसके बजाय गेंद की स्थिति को अपडेट करने या हर फ्रेम के लिए गेंदों को हटाने और रीमेक करने की भी सलाह दूंगा (जो इसे और अधिक सुचारू रूप से चलाने में मदद करेगा)।
 – 
Novel
8 सितंबर 2021, 06:38
1
दो गेंदों के केंद्रों के बीच distance की गणना करें, यदि distance <= ballsize, तो दोनों गेंदें टकराती हैं।
 – 
acw1668
8 सितंबर 2021, 06:45

1 उत्तर

सबसे बढ़िया उत्तर

आपको गेंदों के बीच की दूरी की जांच करनी होगी। यदि दो वृत्तों के केंद्र के बीच की दूरी वृत्तों की त्रिज्याओं के योग से कम है, तो वे टकरा रहे हैं।

(math.sqrt((ball1.x- ball2.x) ** 2 + (ball1.y - ball2.y) ** 2) <= sum_radii

फिर गेंदों का डाई और डीएक्स बदलें।

1
Random_Pythoneer59 8 सितंबर 2021, 08:52
यह व्यास होना चाहिए (मान लें कि दो गेंदों की त्रिज्या समान है), त्रिज्या नहीं।
 – 
acw1668
8 सितंबर 2021, 08:07
आपको यह जांचना है कि क्या दो वृत्तों के केंद्र के बीच की दूरी वृत्तों की त्रिज्या के योग से कम है। यह एक सामान्य मामले के लिए है। यदि वृत्तों की त्रिज्या समान है तो आप व्यास का उपयोग कर सकते हैं। मैं अपने उत्तर को और अधिक स्पष्ट होने के लिए संपादित करूंगा।
 – 
Random_Pythoneer59
8 सितंबर 2021, 08:51