如何使用Python turtle库在五边形每条边外侧绘制对应圆形?
实现五边形各边对应圆形绘制
需求
绘制5个圆形,每个圆形分别匹配正五边形的一条边,预期效果如下:
原有代码问题
当前编写的代码无法实现预期效果,原有代码如下:
import turtle turtleStar = turtle.Turtle() for s in range(5): turtleStar.forward(100) turtleStar.right(144) turtleStar.left(36) turtleStar.forward(62) for p in range(4): turtleStar.right(72) turtleStar.forward(62) for c in range(5): r = 50 turtleStar.circle(r) turtleStar.right(100)
代码失效的核心原因:
- 初始循环转向角度为144度,画出来的是五角星而非需要的正五边形,基础图形错误
- 画圆的起始位置没有对齐五边形各边的中点,圆心偏移
- 单次画圆后的转向角度计算错误,无法移动到下一条边的正确绘制位置
- 圆半径是硬编码的固定值,没有和五边形边长做几何匹配,大小不对
可直接运行的修正代码
import turtle import math turtleStar = turtle.Turtle() side_len = 100 # 几何计算匹配边长的圆半径:正五边形外接圆对应半径,保证圆直径和边长完全贴合 circle_r = (side_len / 2) / math.sin(math.radians(36)) # 先绘制正五边形 turtleStar.penup() turtleStar.goto(-side_len/2, 0) turtleStar.pendown() for _ in range(5): turtleStar.forward(side_len) turtleStar.right(72) # 逐边绘制对应圆形 turtleStar.penup() for _ in range(5): # 移动到当前边的中点位置 turtleStar.forward(side_len / 2) # 调整朝向,让圆形直径和当前边完全重合 turtleStar.left(90) turtleStar.pendown() turtleStar.circle(circle_r) turtleStar.penup() # 复位朝向,移动到下一个顶点 turtleStar.right(90) turtleStar.forward(side_len / 2) turtleStar.right(72) turtleStar.hideturtle() turtle.done()
代码逻辑说明
- 圆半径通过正五边形几何公式计算得出,和边长100完全匹配,不会出现大小错位
- 绘制圆形前后通过抬笔避免留下多余的移动轨迹
- 每次画圆前调整海龟朝向,保证圆形和对应边精准对齐,不会出现角度偏移
内容的提问来源于stack exchange,提问作者user19266785
相关产品推荐
相关产品推荐

