【问题标题】:Tkinter: Draw a circle on a canvas without create_ovalTkinter:在没有 create_oval 的画布上画一个圆圈
【发布时间】: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))(并将打印内容发布到您的问题中。)

标签: python canvas tkinter


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2011-07-25
    相关资源
    最近更新 更多