【问题标题】:How to make fractal plants with l-system in turtle graphics?如何在海龟图形中使用 l 系统制作分形植物?
【发布时间】:2013-10-03 13:03:52
【问题描述】:

我正在尝试从 Wikipedia 制作 this fractal plant(示例 7)。然而,即使我使用相同的规则,我最终得到的东西看起来更像一棵树。代码如下:

def fraktal_plante(padde, depth):
    Xmerke(padde, depth-1)       # X

def Xmerke(padde, depth):
    if depth > 0:
        padde.forward(12)
        padde.right(25)
        pos1 = padde.position()
        head1 = padde.heading()
        Xmerke(padde, depth-1)
        padde.up()
        padde.goto(pos1)
        padde.setheading(head1)
        padde.down()
        padde.left(25)
        Xmerke(padde, depth-1)
        padde.up()
        padde.goto(pos1)
        padde.setheading(head1)
        padde.down()
        padde.left(25)
        padde.forward(12)
        pos2 = padde.position()
        head2 = padde.heading()
        padde.left(25)
        padde.forward(12)
        Xmerke(padde, depth-1)
        padde.up()
        padde.goto(pos2)
        padde.setheading(head2)
        padde.down()
        padde.right(25)
        Xmerke(padde, depth-1)

    def Fmerke (padde, depth):
        if depth > 0:
            padde.forward(12)
            padde.forward(12)

你能帮帮我吗?我是python新手,所以请用简单的方式解释一下!

【问题讨论】:

    标签: python turtle-graphics


    【解决方案1】:

    我认为你有一棵树的原因是你的.forward() 步骤太大。试试paddle.forward(1) 而不是12

    对于它的价值,这是我从维基百科描述中写的:

    import turtle
    import sys
    
    def generate(n, result='[X]'):
        for _ in range(n):
            # rule #2
            result = result.replace('F', 'FF')
            # rule #1
            result = result.replace('X', 'F-[[X]+X]+F[+FX]-X')
    
        return result
    
    def draw(cmds, size=2):
        stack = []
        for cmd in cmds:
            if cmd=='F':
                turtle.forward(size)
            elif cmd=='-':
                turtle.left(25)
            elif cmd=='+':
                turtle.right(25)
            elif cmd=='X':
                pass
            elif cmd=='[':
                stack.append((turtle.position(), turtle.heading()))
            elif cmd==']':
                position, heading = stack.pop()
                turtle.penup()
                turtle.setposition(position)
                turtle.setheading(heading)
                turtle.pendown()
            else:
                raise ValueError('Unknown Cmd: {}'.format(ord(cmd)))
        turtle.update()
    
    def setup():
        turtle.hideturtle()
        turtle.tracer(1e3,0)
        turtle.left(90)
        turtle.penup()
        turtle.goto(0,-turtle.window_height()/2)
        turtle.pendown()
    
    setup()
    plant = generate(6)
    draw(plant, 2)
    turtle.exitonclick()
    

    【讨论】:

    • 您可能会觉得我的codegolf challenge 很有趣。有一个 294 个字符的 Python L 系统。
    • 是的,@jsetting32,我不得不更改设置代码来绘制龙曲线。看这里:ideone.com/RvmXFn。在setup() 中,对hideturtle()tracer() 的调用使绘图速度更快。其他调用确保此特定图像在窗口中。
    猜你喜欢
    • 2011-09-13
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多