鱼C论坛

 找回密码
 立即注册
查看: 187|回复: 7

[已解决]turtle库的一些小问题

[复制链接]
发表于 2025-3-20 15:35:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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()


这串代码为什么运行完之后五角星是中空的?
最佳答案
2025-3-20 16:32:39
这是因为默认情况下,turtle 对自相交图形采用了“偶数-奇数规则”(even-odd rule)来判定哪些区域是内部、哪些是外部。

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

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

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


Snipaste_2025-03-20_15-35-26.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-3-20 15:36:04 | 显示全部楼层
你的代码中,五角星是中空的,可能的原因是 `pen.fillcolor("red")` 仅仅设置了填充颜色,但 `pen.color("yellow")` 也同时设置了画笔颜色为黄色。  

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

  1. import turtle

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

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

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

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

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

  15. # 完成绘图
  16. turtle.done()
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-3-20 16:32:39 | 显示全部楼层    本楼为最佳答案   
这是因为默认情况下,turtle 对自相交图形采用了“偶数-奇数规则”(even-odd rule)来判定哪些区域是内部、哪些是外部。

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

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

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


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

但是我在看视频和问ai的过程中发现大家用的都是这一套代码,是最近Python的规则改了吗。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

一直是这个规则哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-20 18:12:33 | 显示全部楼层

感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-3-20 18:26:38 | 显示全部楼层

客气,记得设置最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-3-21 10:10:04 | 显示全部楼层
看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-5 19:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表