You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:39:05