Tkinter:在没有create_oval的画布上画一个圆圈

时间:2017-02-21 19:50:53

标签: python canvas tkinter

我想逐点绘制一个圆,所以没有 canvas.create_oval(),但使用公式 x ^ 2 + y ^ 2 = r 。圆也必须在正方形内绘制。

这是代码:

center = (maxx - ((maxx - minx) / 2), maxy - ((maxy - miny) / 2))
radius = ((maxx - minx) / 2 + (maxy - miny) / 2) / 2

for xc in range(0, x):
    for yc in range(0, y):
        if radius - 10 <= (xc - center[0]) ** 2 + (yc - center[1]) ** 2 <= radius + 10:
            canvas.create_oval(xc + 50, yc + 50, xc + 50, yc + 50)
  • (maxx,maxy)和(minx,min)用于绘制矩形(使用 canvas.create_rectangle

  • x和y是画布的宽度和高度

  • canvas.create_oval(xc + 50,yc + 50,xc + 50,yc + 50)仅用于模拟点,因为在tkinter中不存在像< EM> canvas.create_point

问题是出来的圈子与我的预期完全不同。 (不要在乎手绘圈。

x = 400,y = 300,minx = 103,maxx = 269,miny = 62,maxy = 212,center =(186.0,137.0),radius = 79.0

photo

正如你所看到的那样,圆圈真的很小,中心不在我想要的地方? 我做错了什么?

1 个答案:

答案 0 :(得分:1)

我在讨论所有输入时进行了很好的讨论,但输入不是问题。

遗憾的是,我们花了很长时间才意识到这个问题是公式。

它不是r = x ^ 2 + y ^ 2,它是r ^ 2 = x ^ 2 + y ^ 2.

适当的循环如下所示:

r_squared = radius * radius
for xc in range(0, x):
    for yc in range(0, y):
       if r_squared - 10 <= (xc - center[0]) ** 2 + (yc - center[1]) ** 2 <= r_squared + 10:
           canvas.create_oval(xc, yc, xc, yc)