我想逐点绘制一个圆,所以没有 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
正如你所看到的那样,圆圈真的很小,中心不在我想要的地方? 我做错了什么?
答案 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)