使用Python的0L-System生成谢尔宾斯基三角遇到问题求助
修复Python Turtle实现谢尔宾斯基三角的问题
问题分析
你的代码存在两处核心问题,导致无法生成完整的谢尔宾斯基三角:
- 基础绘制逻辑错误:当
n=0时,仅执行三次forward(size)但未转向,画出的是一条长线段而非闭合的等边三角形。 - 递归分支逻辑错误:当前的递归调用与转向组合不符合谢尔宾斯基三角的分形规则,无法正确定位三个小三角形的绘制位置,导致图形缺失。
修正后的代码
from turtle import * def sierpinksi(size: int, n: int): if n == 0: # 基础情况:绘制闭合的等边三角形 for _ in range(3): forward(size) right(120) else: # 递归绘制三个角的小三角形,遵循分形规则 sierpinksi(size // 2, n - 1) forward(size // 2) sierpinksi(size // 2, n - 1) backward(size // 2) right(120) forward(size // 2) left(120) sierpinksi(size // 2, n - 1) right(120) backward(size // 2) left(120) # 调整初始位置,让图形居中显示 penup() backward(100) left(60) pendown() sierpinksi(200, 2) done()
修正说明
- 基础绘制修正:在
n=0的循环中添加right(120),确保每次前进后转向,画出完整的等边三角形。 - 递归逻辑修正:通过前进、后退和转向操作,依次定位原三角形的三个角位置,分别绘制小三角形,符合谢尔宾斯基三角“三分大三角形,保留三个小三角”的分形规则。
- 初始位置调整:通过抬笔移动,让生成的图形居中显示,避免部分内容超出窗口范围。
内容的提问来源于stack exchange,提问作者Tom Riddle
相关产品推荐
相关产品推荐

