如何在椭圆路径上放置均匀间隔的圆圈?

时间:2015-02-18 13:31:31

标签: python canvas tkinter geometry

我有一个小的(实际上很大的)任务需要照顾,我想知道是否有人可以帮我解决这个问题。我曾几次寻找答案,但没有成功

http://s24.postimg.org/89r1zmgl1/Untitled.png)< ---椭圆

我想在椭圆上显示任意数量的圆圈,您可以在上面的链接上看到。椭圆和圆都用Tkinter定义。

class NetworkFrame:
    def __init__(self, master, number_of_people):

       DisplayFrame = Canvas(master, bg="white", width=720, height=300)
       DisplayFrame.grid(row=0, columnspan=7, column=0, sticky='W', padx=5, pady=5)
       DisplayFrame.create_oval(20, 20, 700, 280, width=1)

所以我的想法是 - 用户输入一定的数字(number_of_people),它会使椭圆定义的路径上出现一定数量的圆圈,均匀分布并对称放置。

理想情况下,这就是我想要发生的事情,因此我可以将其调整为我之前定义的任何形状,但如果有另一种方法使它们看起来遵循椭圆路径,那么它也是可以接受的。

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

如果有人需要这个,我可以通过Kevin发布的链接设法做到这一点!

以下是它的工作原理

def __init__(self, master, number_of_people, node_size):
    a = 350
    b = 140
    ellipsePoints = [(a * cos(theta), b * sin(theta))
                     for theta in (pi*2 * i/number_of_people for i in range(number_of_people))]
    DisplayFrame = Canvas(root, bg="white", width=725, height=320)
    DisplayFrame.grid(row=0, columnspan=7, column=0, sticky='W', padx=5, pady=5)
    for i in range(number_of_people):
            DisplayFrame.create_oval(ellipsePoints[i][0]+355, ellipsePoints[i][1]+155,
                                     ellipsePoints[i][0]+355+node_size, ellipsePoints[i][1]+155+node_size, fill="red")