python - 使用海龟图形和递归的希尔伯特曲线
问题描述
我正在尝试使用 python 海龟图形和递归来实现 L-System 生成的希尔伯特曲线。我的代码似乎适用于递归 n=1 和 n=2 的前两个级别,但除此之外,图形只是纠缠在一起(尽管我能够观察其中的更多模块),我似乎无法掌握这里可能有什么问题,我是否需要一些中间步骤来重新生成希尔伯特模块以进行更深层次的递归?请看我下面的代码,它比较简单:
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()
解决方案
问题出在你的else
条款上。rule
已经反转进入函数,因此您需要将其视为rule
与then子句相同:
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
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()
推荐阅读
- mysql - 错误代码:1241。操作数应在 INSERT 中包含 1 列
- android - 如何修复 Android Bitmap 中已弃用的问题?
- c - 使用 C 中的递归显示正整数个位数的所有唯一数字组合,其总和等于另一个正整数
- reactjs - TypeError:无法读取未定义反应错误的属性“地图”
- javascript - 如何使用 TypeScript 进行“映射”?
- python - 返回所有列的特定范围内的值的数据框
- reactjs - 父母重新渲染但它的孩子不会重新渲染的情况是什么?
- javascript - (逻辑错误)简单的随机数猜谜游戏 - Javascript
- python - 安装python包在mac上不起作用
- haskell - 如何在多个条件下使用地图