如何在椭圆路径上放置均匀间隔的圆圈?
How to place evenly spaced circles on an elliptical path?
我有一个小任务(实际上是大任务)要处理,我想知道是否有人可以帮我解决这个问题。我已经搜索了几次答案但没有成功
(http://s24.postimg.org/89r1zmgl1/Untitled.png)<--- 椭圆
我想在上面 link 中看到的椭圆上出现任意数量的圆圈。椭圆和圆都是用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),就会在椭圆定义的路径上出现一定数量的圆,间隔均匀,对称放置。
理想情况下,这就是我想要发生的事情,因此我可以将其调整为我之前定义的任何形状,但如果有另一种方法可以使它们看起来遵循椭圆路径,那也是可以接受的。
感谢您的宝贵时间!
万一有人需要这个,多亏了 link 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")
我有一个小任务(实际上是大任务)要处理,我想知道是否有人可以帮我解决这个问题。我已经搜索了几次答案但没有成功
(http://s24.postimg.org/89r1zmgl1/Untitled.png)<--- 椭圆
我想在上面 link 中看到的椭圆上出现任意数量的圆圈。椭圆和圆都是用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),就会在椭圆定义的路径上出现一定数量的圆,间隔均匀,对称放置。
理想情况下,这就是我想要发生的事情,因此我可以将其调整为我之前定义的任何形状,但如果有另一种方法可以使它们看起来遵循椭圆路径,那也是可以接受的。
感谢您的宝贵时间!
万一有人需要这个,多亏了 link 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")