HuangBin2025 发表于 2025-4-10 17:11:23

使用turtle模块画实心五角星,程序结果是空心的,问题在哪?

本帖最后由 HuangBin2025 于 2025-4-10 17:13 编辑

import turtle
turtle.hideturtle()
turtle.color('red')
turtle.begin_fill()
for i in range(5):
    turtle.forward(200)
    turtle.right(144)
turtle.end_fill()
turtle.mainloop()

FishC 发表于 2025-4-10 17:14:40

问题解答:五角星填充失效的原因及解决方案

你的代码绘制五角星后未闭合路径,导致填充失败。关键问题在于路径起点和终点未对齐。以下是修正后的代码:


import turtle

turtle.hideturtle()
turtle.color('red')

# 调整初始方向为72度,确保路径闭合
turtle.setheading(72)# 新增关键代码
turtle.begin_fill()

for i in range(5):
    turtle.forward(200)
    turtle.right(144)# 每次右转144度

turtle.end_fill()
turtle.mainloop()


修改说明:

[*]添加 turtle.setheading(72):将初始方向调整为72度,保证五次移动后路径自动闭合
[*]填充逻辑不需要调整,begin_fill() 和 end_fill() 需保持包裹绘制代码


原理图解:
五角星每个顶点的外角为144度,但路径闭合需要初始方向偏移72度(360/5的1/2)。通过调整初始角度,保证绘制完成后首尾相接,填充才能生效。

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

xiaoniugogogo 发表于 2025-4-10 17:31:32

只能一笔画边缘才能填充满

小甲鱼的二师兄 发表于 2025-4-10 18:02:12

使官方的填充算法问题导致,你用这个方法画边缘就没问题:

import turtle

turtle.hideturtle()
turtle.color('red')

# 调整起始方向,使五角星闭合
turtle.setheading(72)

turtle.begin_fill()

for i in range(5):
    turtle.fd(50)
    turtle.left(72)
    turtle.fd(50)
    turtle.right(144)
   
turtle.end_fill()

turtle.done()

HuangBin2025 发表于 2025-4-10 18:56:05

不用调整起始方向,只要连续沿着边缘画完就可以
页: [1]
查看完整版本: 使用turtle模块画实心五角星,程序结果是空心的,问题在哪?