【发布时间】:2017-02-21 19:50:52
【问题描述】:
我想逐点画一个圆,所以不用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 中不存在类似 canvas.create_point
问题是出来的圈子和我预想的完全不一样。 (不要在意手绘的圆圈。
x = 400, y = 300, minx = 103, maxx = 269, miny = 62, maxy = 212, center = (186.0, 137.0), radius = 79.0
如您所见,圆圈真的更小,而中心不是我想要的? 我做错了什么??
【问题讨论】:
-
'我做错了什么??' - 首先,你打电话给
canvas.create_oval(),尽管你有评论,“我不能使用canvas.create_oval()”。你能打电话还是不打电话?如果没有,为什么不呢? -
对不起,我忘了解释。我只使用 create_oval 来模拟一个点(事实上你可以看到绘制的圆圈有 1 个像素大)。我不能使用 .create_oval 来绘制主圆,一点也不
-
我知道你说忽略手绘圆圈,但它是从哪里来的?手绘以表明这大致是预期的结果?另外,那个框是
create_rectangle的结果,对吧?另外,什么代码在中心画了那个点? -
您调用
create_oval的代码看起来不对。我可以理解使圆的半径为 50,但是您不想要create_oval(xc-25, yc-25, xc+25, yc+25)吗?如果您要将x1设置为x2并将y1设置为y2,则应为create_oval(xc, yc, xc, yc)。 -
我唯一的其他建议是基本调试。在您的 for 循环之前,将所有内容打印出来:
print("x = {0}, y = {1}, minx = {2}, maxx = {3}, miny = {4}, maxy = {5}, center = {6}, radius = {7}".format(minx, maxx, miny, maxy, center, radius))(并将打印内容发布到您的问题中。)