不同操作系统上Python海龟绘图的不一致性

3

我正在使用Python的turtle模块绘制一个相当简单的形状,以下是代码:

import turtle

turtle.color('black', '#fef00e')
turtle.begin_fill()
turtle.left(180)
turtle.forward(100)
for i in range(5):
    turtle.right(90)
    turtle.forward(100+50*i)
turtle.end_fill()
turtle.done()

奇怪的是,在Windows和我尝试过的所有其他操作系统(Ubuntu、Arch、OSX)上,这都会产生两个不同的结果。在Windows上,具有偶数个重叠填充的区域仍然填充,但对于其他操作系统而言则被消除了。有人能解释一下这是什么原因吗?是否有任何方法可以影响它?这种行为看起来非常不一致。

enter image description here enter image description here

看起来这也是一种设计选择;我不确定哪个是“正确”的版本。


他们可能出于某种原因使用了不同的填充规则。左边的是非零环绕数规则,右边的是奇偶规则 - Aleksi Torhamo
1个回答

1
问题在于“fill”在特定系统中是否意味着“颜色”或“切换颜色”。对同一区域进行两次上色即为上色。进行两次切换则不会切换。(这一对是Spencer Brown的“形式法则”的基础。)Turtle是在Tkinter之上实现的。以下是一个简单的Tkinter程序,在Windows上复制了左图(尽管没有黑线,这是turtle添加的)。我强烈怀疑您将在*nix上得到右图(我目前没有*nix)。
from tkinter import *
root = Tk()
canv = Canvas(root, width=800, height=800)
canv.pack()
l = canv.create_polygon(
        500,400, 400,400, 400,300, 550,300,
        550,500, 300,500, 300,200, 500,400, fill='yellow')
root.mainloop()

如果是这样,那么我怀疑差异是由底层图形系统和其对“填充”的解释造成的。我查看了tk manual,但没有找到关于两次填充含义的内容,只有“-fill颜色”。

我可以确认这确实会产生相同的差异。我怀疑是底层图形库导致了这种差异,因为在两个平台上运行的Python代码是完全相同的(包括编译后的CPython)。 - Joost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接