使用Python Turtle递归绘制分形正方形图案问题求解
问题原因
你现有代码的核心问题是绘制完当前层级正方形后,海龟的朝向、位移计算逻辑错误,两次递归调用的起始位置没有对齐到正确的子正方形锚点,才会出现尺寸偏差、位移过大的问题。
修改思路
- 绘制当前正方形时统一逻辑,绘制完成后回到正方形左下角原点,保持朝向向右,避免后续位移计算混乱
- 右上角子正方形的起始锚点为当前正方形向上、向右各偏移
2*size/3的位置,子正方形尺寸为当前的1/3 - 左下角子正方形的起始锚点就是当前正方形的左下角原点,无需额外偏移
- 递归调用前后统一处理抬笔/落笔状态,避免绘制多余的辅助线
修复后完整代码
import turtle as tt def recurse(depth, size): if depth == 0: return # 设置当前层级正方形颜色 tt.pencolor('blue' if depth % 2 == 0 else 'orange') # 绘制当前正方形,绘制完成后回到左下角原点,朝向保持向右 tt.pendown() for _ in range(4): tt.forward(size) tt.left(90) tt.penup() # 移动到右上角子正方形的起始位置 tt.forward(2 * size / 3) tt.left(90) tt.forward(2 * size / 3) tt.right(90) # 递归绘制右上角子正方形 recurse(depth - 1, size / 3) # 回到当前正方形左下角原点 tt.right(90) tt.forward(2 * size / 3) tt.left(90) tt.backward(2 * size / 3) # 递归绘制左下角子正方形 recurse(depth - 1, size / 3) # 调整初始绘制位置,避免内容超出画布 tt.penup() tt.goto(-150, -150) tt.pendown() recurse(4, 200) tt.hideturtle() tt.done()
运行以上代码即可得到你预期的分形正方形效果。
内容的提问来源于stack exchange,提问作者HK 416
相关产品推荐
相关产品推荐

