gpt4 book ai didi

python - 使用 turtle 图形和递归的希尔伯特曲线

转载 作者:行者123 更新时间:2023-12-05 09:15:02 25 4
gpt4 key购买 nike

我正在尝试实现一个 L 系统生成的希尔伯特曲线,利用 python turtle 图形和递归。我的代码似乎适用于递归的前两个级别 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

最佳答案

问题出在您的 else 子句上。 rule 已经反转进入函数,因此您需要像对待 then 子句一样对待 rule:

    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 从 bool 值更改为数字 parity,即 1 或 -1,然后乘以 parity顺便说一句,我们可以删除原始 if 语句的两个子句之一:

from turtle import Screen, Turtle

def hilbert_curve(turtle, A, parity, n):

if n < 1:
return

turtle.left(parity * 90)
hilbert_curve(turtle, A, - parity, n - 1)
turtle.forward(A)
turtle.right(parity * 90)
hilbert_curve(turtle, A, parity, n - 1)
turtle.forward(A)
hilbert_curve(turtle, A, parity, n - 1)
turtle.right(parity * 90)
turtle.forward(A)
hilbert_curve(turtle, A, - parity, n - 1)
turtle.left(parity * 90)

screen = Screen()

yertle = Turtle()
yertle.speed('fastest') # because I have no patience

hilbert_curve(yertle, 10, 1, 4)

screen.exitonclick()

enter image description here

关于python - 使用 turtle 图形和递归的希尔伯特曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53243985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com