python - 在 Python 中绘制分形树,不确定如何进行

标签 python turtle-graphics fractals

到目前为止我在 python 中有这个

import turtle
import math
t = turtle.Turtle()
t.shape("turtle")
t.lt(90)

lv = 11
l  = 100
s  = 17

t.penup()
t.bk(l)
t.pendown()
t.fd(l)

def draw_tree(l, level):
    l = 3.0/4.0*l
    t.lt(s)
    t.fd(l)
    level +=1
    if level<lv:
        draw_tree(l, level)

    t.bk(l)
    t.rt(2*s)
    t.fd(l)
    if level<=lv:
        draw_tree(l, level)
    t.bk(l)
    t.lt(s)
    level -=1

t.speed(100)        
draw_tree(l, 2)

但我有点卡在如何进行中,因为我需要伸手去 build 这棵树。这就是我要制作的:

Fractal tree

谁能告诉我我做错了什么?

最佳答案

我真的很喜欢@cdlane答案,所以我玩了一会儿代码。这棵树现在看起来好多了,代码也更具可读性,所以我认为值得分享。

enter image description here

代码:

import turtle

WIDTH = 15
BRANCH_LENGTH = 120
ROTATION_LENGTH = 27


class Tree_Fractal(turtle.Turtle):
    def __init__(self, level):
        super(Tree_Fractal, self).__init__()
        self.level = level
        self.hideturtle()
        self.speed('fastest')
        self.left(90)
        self.width(WIDTH)
        self.penup()
        self.back(BRANCH_LENGTH * 1.5)
        self.pendown()
        self.forward(BRANCH_LENGTH)
        self.draw_tree(BRANCH_LENGTH, level)

    def draw_tree(self, branch_length, level):
        width = self.width()
        self.width(width * 3. / 4.)
        branch_length *= 3. / 4.
        self.left(ROTATION_LENGTH)
        self.forward(branch_length)

        if level > 0:
            self.draw_tree(branch_length, level - 1)
        self.back(branch_length)
        self.right(2 * ROTATION_LENGTH)
        self.forward(branch_length)

        if level > 0:
            self.draw_tree(branch_length, level - 1)
        self.back(branch_length)
        self.left(ROTATION_LENGTH)

        self.width(width)


if __name__ == '__main__':
    tree_level = 11  # choose
    tree = Tree_Fractal(tree_level)
    turtle.done()

关于python - 在 Python 中绘制分形树,不确定如何进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39853005/

相关文章:

python - 如何加载一个大文件并将其切成较小的文件?

python - 界定 ModelChoiceField 中的选择

python - 在循环内迭代变量名称

python - 有什么方法可以在 Python 中用 turtle 调整 gif 形状的大小?

c++ - 牛顿分形生成

python - 如何在导入的 3D 波前 OBJ 文件上实现对象碰撞

python - 将 python 对象列表传递给 qml

java - 毕达哥拉斯树与 g2d

Python 3.12 turtle 在用相同代码填充 3.11 的多边形内部为空

c++ - 分形树 - 未绘制分支