Hilbert曲线的海龟图与递归

2024-06-09 00:11:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图实现一个L系统生成的Hilbert曲线,利用pythonturtle图形和递归。我的代码似乎适用于前两个递归级别n=1和n=2,但除此之外,图形只是纠缠在一起(虽然我可以观察到它们中的其他模块),而且我似乎无法理解这里可能出现的问题,我是否需要一些中间步骤来重新生成Hilbert模块以实现更深层次的递归?请参阅下面我的代码,它相对简单:

import turtle

def Hilbert_curve(A,rule,t,n):

    if n>=1:
        if rule:
            t.left(90)
            Hilbert_curve(A,not rule,t, n-1)
            t.forward(A)
            t.right(90)
            Hilbert_curve(A, rule,t, n-1)
            t.forward(A)
            Hilbert_curve(A,rule,t, n-1)
            t.right(90)
            t.forward(A)
            Hilbert_curve(A,not rule,t, n-1)
            t.left(90)
        else:
            t.right(90)
            Hilbert_curve(A,rule,t, n-1)
            t.forward(A)
            t.left(90)
            Hilbert_curve(A,not rule,t, n-1)
            t.forward(A)
            Hilbert_curve(A,not rule,t, n-1)
            t.left(90)
            t.forward(A)
            Hilbert_curve(A, rule,t, n-1)
            t.right(90)

def main():
    A=10
    t=turtle.Turtle()
    my_win=turtle.Screen()
    n=2
    rule=True
    Hilbert_curve(A,rule,t,n)
    my_win.exitonclick()

main()

Hilbert n=2

Hilbert n=3


Tags: 模块代码right图形ifmainmydef
1条回答
网友
1楼 · 发布于 2024-06-09 00:11:07

{cd1>是你的问题。函数中的rule已经颠倒过来了,因此您需要将rulethen子句相同:

    else:
        t.right(90)
        Hilbert_curve(A, not rule, t, n - 1)
        t.forward(A)
        t.left(90)
        Hilbert_curve(A, rule, t, n - 1)
        t.forward(A)
        Hilbert_curve(A, rule, t, n - 1)
        t.left(90)
        t.forward(A)
        Hilbert_curve(A, not rule, t, n - 1)
        t.right(90)

但是,如果我们将rule从一个布尔值改为一个数字,parity,即1或-1,然后将parity乘以角度,我们可以消除if语句中的两个子句之一:

^{pr2}$

{a1}

相关问题 更多 >