在我的 python 程序中,我有一个 tkinter 画布,里面有一个圆圈,我想创建更小的圆圈,但它们需要位于大圆圈内而不接触它。除了每次使用 while 循环检查碰撞之外,是否有一种简单的方法可以做到这一点。
这是我目前拥有的示例:
from tkinter import Tk,Canvas
import random as r
root=Tk()
canv=Canvas(master=root,width=80,height=80)
circ1=canv.create_oval(2,2,78,78)
canv.pack()
for x in range(6): #Inside this for loop is where I am struggling
x=r.randint(0,60)
y=r.randint(0,60)
canv.create_oval((x,y,x+20,y+20),outline="black",fill="green")
root.mainloop()
这里,代码在画布上随机创建 6 个绿色小圆圈,但我希望它们全部位于外圆内部而不接触它。理论上,它们应该都清晰可见,因为我试图重新创建的游戏策略之一就是计算数量,但这并不重要。 我希望这个编辑有帮助
from tkinter import Tk, Canvas
import random as r
import math
root = Tk()
canv = Canvas(master=root, width=80, height=80)
circ1 = canv.create_oval(2, 2, 78, 78)
canv.pack()
circle_radius = 38
small_circle_radius = 10
for _ in range(60):
angle = r.uniform(0, 2 * math.pi) # 2pi = 360deg
distance = r.uniform(small_circle_radius, circle_radius - small_circle_radius)
x = 40 + distance * math.cos(angle)
y = 40 + distance * math.sin(angle)
canv.create_oval((x - small_circle_radius, y - small_circle_radius, x + small_circle_radius, y + small_circle_radius), outline="black", fill="green")
root.mainloop()
distance * math.cos(angle)
给出了小圆的中心与大圆的中心在水平方向上的距离。