1483704583 发表于 2025-3-20 15:35:52

turtle库的一些小问题

import turtle

# 创建画布和画笔
screen = turtle.Screen()
pen = turtle.Turtle()

# 设置画笔颜色和填充颜色
pen.color("yellow")
pen.fillcolor("red")

# 开始填充颜色
pen.begin_fill()

# 绘制五角星的五个边
for _ in range(5):
    pen.forward(100)# 前进100个单位长度
    pen.right(144)    # 右转144度

# 结束填充颜色
pen.end_fill()

# 完成绘图
turtle.done()


这串代码为什么运行完之后五角星是中空的?

FishC 发表于 2025-3-20 15:36:04

你的代码中,五角星是中空的,可能的原因是 `pen.fillcolor("red")` 仅仅设置了填充颜色,但 `pen.color("yellow")` 也同时设置了画笔颜色为黄色。

要确保五角星被正确填充,你可以使用 `pen.color("red", "red")`,这样同时设置画笔颜色和填充颜色为红色。修改后的代码如下:

import turtle

# 创建画布和画笔
screen = turtle.Screen()
pen = turtle.Turtle()

# 设置画笔颜色和填充颜色
pen.color("red", "red")# 同时设置画笔颜色和填充颜色

# 开始填充颜色
pen.begin_fill()

# 绘制五角星的五个边
for _ in range(5):
    pen.forward(100)# 前进100个单位长度
    pen.right(144)    # 右转144度

# 结束填充颜色
pen.end_fill()

# 完成绘图
turtle.done()

这样,五角星的内部就会被正确填充为红色。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

不二如是 发表于 2025-3-20 16:32:39

这是因为默认情况下,turtle 对自相交图形采用了“偶数-奇数规则”(even-odd rule)来判定哪些区域是内部、哪些是外部。

五角星属于自相交图形,它在中心会形成一个“孔洞”,根据该规则中心区域会被视为外部,所以不会被填充,就看起来是“空心”的。

如果希望绘制实心的五角星,一般有两种思路:


[*]改用其他绘制方式:例如拆分为多个三角形或使用更复杂的算法去绘制并填充所有内部区域。
[*]手动绘制“封闭多边形”:如果你只想要一个看起来“实心”的星形,可以先绘制外部轮廓,再用其他线段把中心补上,保证没有自相交部分,然后再进行 begin_fill() / end_fill()。这样就能绕开“自相交”带来的填充问题。


1483704583 发表于 2025-3-20 16:42:59

不二如是 发表于 2025-3-20 16:32
这是因为默认情况下,turtle 对自相交图形采用了“偶数-奇数规则”(even-odd rule)来判定哪些区域是内部 ...

但是我在看视频和问ai的过程中发现大家用的都是这一套代码,是最近Python的规则改了吗。

不二如是 发表于 2025-3-20 16:57:20

1483704583 发表于 2025-3-20 16:42
但是我在看视频和问ai的过程中发现大家用的都是这一套代码,是最近Python的规则改了吗。

一直是这个规则哦

1483704583 发表于 2025-3-20 18:12:33

不二如是 发表于 2025-3-20 16:57
一直是这个规则哦

感谢

不二如是 发表于 2025-3-20 18:26:38

1483704583 发表于 2025-3-20 18:12
感谢

客气,记得设置最佳{:10_302:}

happyweeks365 发表于 2025-3-21 10:10:04

看看
页: [1]
查看完整版本: turtle库的一些小问题