首页 > 解决方案 > 在 python 中使用基本递归绘制分形时出错

问题描述

所以最近我试图在我目前正在学习的 Python 课程中完成我的作业,并且我试图使用递归和基本的 Python 函数来绘制分形图案。我遇到了我的分形不断变成以下合并的错误:结果图像

当然,想要的结果是一个完整的分形,具有您在最左侧分支上看到的模式。这是我的代码:

def drawStellaFractal(canvas, cx, cy, r, level):
    if level == 0:
        drawStellaFace(canvas, cx, cy, r)
    else:
        drawStellaFractal(canvas, cx, cy, r, level-1)
        drawStellaFractal(canvas, cx-cx//2, cy-cy//2, r//2, level-1)
        drawStellaFractal(canvas, cx+cx//2, cy-cy//2, r//2, level-1)

drawStellaFace 只是为了你在图案中看到的脸,我只是不明白我做错了什么?有人可以指出我的错误吗?

谢谢

标签: python

解决方案


左侧有效,因为中点总是在接近零时减半。右侧是错误的,因为它在通往无穷大的道路上减半(取决于级别数)。在递归中,子属性是从父属性派生的。对于此代码,应根据父中心确定子中心。

尝试这个

def drawStellaFractal(canvas, cx, cy, r, level):
    if level == 0:
        drawStellaFace(canvas, cx, cy, r)
    else:
        drawStellaFractal(canvas, cx, cy, r, level-1)
        drawStellaFractal(canvas, cx-r, cy-r, r//2, level-1)
        drawStellaFractal(canvas, cx+r, cy-r, r//2, level-1)

推荐阅读