我不明白为什么要填写这个数字(我希望这里没有填写)。
它不是三角形,因为我使用penup()
和pendown()
移动乌龟而不绘制边缘)。
from turtle import *
color('black', 'yellow')
begin_fill()
forward(200)
penup()
left(120)
forward(200)
left(120)
pendown()
forward(200)
end_fill()
exitonclick()
这就是我所得到的
这里penup()
和pendown()
似乎被忽略了,但我做了其他示例,它们在使用penup
和pendown
的同时也可以正常工作。
有人可以解释一下乌龟的填充算法吗?
答案 0 :(得分:1)
填充与图形无关。您可以在source code中进行检查:
self.screen._drawpoly(self._fillitem, self._fillpath, fill=self._fillcolor)
正如您在此处看到的,end_fill()
只关心_fillpath
,这是自begin_fill()
以来乌龟的路径。它与绘图无关。
只是为了演示,如果您从不绘画任何东西(笔一直都在画),形状仍然会被填充:
from turtle import *
color("black", "green")
begin_fill()
penup()
circle(40)
end_fill()
exitonclick()
答案 1 :(得分:0)
谢谢您的回答。此外,似乎在调用end_fill()时,它通过在最后一个点和第一个点(在begin_fill()之后创建)之间添加一条边来闭合图形。有人可以确认吗?
修改我的示例如下:
from turtle import *
color('black', 'yellow')
begin_fill()
forward(200)
left(120)
forward(200)
end_fill()
exitonclick()
虽然代码仅绘制2条边,但结果是一个彩色三角形。
我希望在这种情况下什么都不会解决(显然,这是一个较大项目的一小部分)。为了避免填充,它认为有必要在与我开始时相同的位置完成,而无需添加任何新边缘。我看到的解决方案是沿创建的边缘反向移动(以相反顺序)。这是一个解决方案({penup()
/ pendown()
可以省略)。
from turtle import *
color('black', 'yellow')
begin_fill()
forward(200)
left(120)
forward(200)
penup()
backward(200) # reverse move
left(-120)
backward(200)
pendown()
end_fill()
exitonclick()
这是结果
有效。您是否看到一种更好的方法来防止填充?