【发布时间】:2021-09-23 11:48:58
【问题描述】:
在最近的一项任务中,我的任务是使用中心坐标和半径作为参数在 tkinter 中绘制一个实心圆。对于任何圆,我知道半径**2 = (x-centerx)**2 + (y-centery)**2。有了这个,我可以拼凑起来:
def circle(img, color, radius, center):
x0, y0 = center
for i in range (radius):
for x in range (x0-i, x0+i):
for y in range (y0-i, y0+i):
if (x-x0)**2 + (y-y0)**2 == i**2:
img.put(color, (x,y))
但是,这只会导致实心圆圈的一些虚线轮廓,可能是因为所有点都是整数。因此,我对if 语句的边界进行了一些处理,并发现了一些奇怪的东西。对于:
def circle(img, color, radius, center):
x0, y0 = center
for i in range (radius):
for x in range (x0-i, x0+i):
for y in range (y0-i, y0+i):
if i**2 - a <= (x-x0)**2 + (y-y0)**2 <= i**2 + a:
img.put(color, (x,y))
a 越大,圆圈就越准确。这是如何运作的?由于我使用i**2 作为x,y 的边界,不应该增加a 导致更大的x,y 值被接受,从而使圆更方?
【问题讨论】: