如何使用Python Turtle绘制大小递增且顶点与上方三角形底边中点精准对齐的堆叠三角形
问题分析
你的代码问题出在画完每个三角形后的移动路径错误,没有准确到达上一个三角形底边的中点,导致后续三角形向左偏移。
具体来说,画完第一个三角形后,你执行的left(120) → forward(20) → right(120)操作,实际上把画笔移动到了第一个三角形的右上角顶点(而非底边中点),这就导致第二个三角形的起点偏左,最终整体无法居中对齐。
修正方案
我们可以重新梳理逻辑:先明确每个三角形的位置关系——每个下方的大三角形的顶部顶点,恰好位于上方小三角形的底边中点。然后通过计算三角形的高度,精准移动画笔到目标位置,同时封装画三角形的函数让代码更简洁。
修正后的代码如下:
from turtle import * import math def draw_upside_triangle(length): """绘制一个顶点朝上的正三角形,当前画笔位置为三角形的顶部顶点""" left(60) # 调整方向,准备画第一条边 for _ in range(3): forward(length) right(120) right(60) # 恢复原方向,方便后续移动 # 初始化位置,让整体图形居中显示 penup() sety(180) # 先把画笔移到上方,留出空间给四个堆叠的三角形 pendown() speed(2) # 调整画笔速度,方便观察绘制过程 # 四个三角形的边长依次递增:20、40、60、80 side_lengths = [20, 40, 60, 80] for length in side_lengths: draw_upside_triangle(length) # 计算当前三角形的高度(正三角形高度公式:(边长×√3)/2) triangle_height = (length * math.sqrt(3)) / 2 # 移动到下一个三角形的顶部顶点(当前三角形底边的中点) penup() forward(triangle_height) # 向下移动一个三角形高度 pendown() done()
代码说明
- 函数封装:
draw_upside_triangle函数负责绘制顶点朝上的正三角形,确保每次绘制后画笔方向回到初始状态,避免方向混乱。 - 精准移动:利用正三角形的高度公式,计算出从当前三角形顶部到底边中点的距离,直接向下移动该距离,确保下一个三角形的顶点正好落在上一个三角形的底边中点。
- 居中初始化:通过
sety(180)把画笔初始位置移到窗口上方,让四个堆叠的三角形整体居中显示。
这样修改后,四个三角形会严格按照要求堆叠,每个的顶点都精准对齐上方三角形的底边中点,不会出现偏移问题。
内容的提问来源于stack exchange,提问作者oli
相关产品推荐
相关产品推荐

