Python 在希尔伯特曲线中,如何将库turtle从更改为matplotlib?
我真的不知道如何解决保持递归的问题,我在研究turtle库,但在asignature中,他们要求使用matplotlib,所以我不确定如何使用它Python 在希尔伯特曲线中,如何将库turtle从更改为matplotlib?,python,matplotlib,recursion,python-turtle,hilbert-curve,Python,Matplotlib,Recursion,Python Turtle,Hilbert Curve,我真的不知道如何解决保持递归的问题,我在研究turtle库,但在asignature中,他们要求使用matplotlib,所以我不确定如何使用它 from turtle import Turtle def hilbert_curve(turtle, A, parity, n): if n == 1: hilbert_curve_draw(turtle, A, parity) else: turtle.right(parity
from turtle import Turtle
def hilbert_curve(turtle, A, parity, n):
if n == 1:
hilbert_curve_draw(turtle, A, parity)
else:
turtle.right(parity * 90)
hilbert_curve(turtle, A, - parity, n - 1)
turtle.forward(A)
turtle.left(parity * 90)
hilbert_curve(turtle, A, parity, n - 1)
turtle.forward(A)
hilbert_curve(turtle, A, parity, n - 1)
turtle.left(parity * 90)
turtle.forward(A)
hilbert_curve(turtle, A, - parity, n - 1)
turtle.right(parity * 90)
def hilbert_curve_draw(turtle, A, parity):
turtle.right(parity * 90)
turtle.forward(A)
turtle.left(parity * 90)
turtle.forward(A)
turtle.left(parity * 90)
turtle.forward(A)
turtle.right(parity * 90)
yertle = Turtle()
yertle.hideturtle()
yertle.penup()
yertle.goto(-200, 200)
yertle.pendown()
yertle.speed('fastest')
hilbert_curve(yertle, 60, 1, 3)
乌龟以其位置和方向保持内部状态。这些可以用局部变量表示。方向可以是元组
(xdir,ydir)
,表示长度为1的向量。向左旋转将使向量与旋转矩阵相乘。当仅使用坐标为-1
、0
和1
的向量时,可以简化旋转
下面的代码实现了这些想法。为了提高可读性,a
已重命名为length
,而n
已重命名为levels
从matplotlib导入pyplot作为plt
def左转(方向、奇偶校验):
返回(定向[1]*奇偶校验,-定向[0]*奇偶校验)
def右转(方向、奇偶性):
返回左转弯(方向-奇偶性)
def绘制线(x0、y0、方向、长度):
x1=x0+方向[0]*长度
y1=y0+方向[1]*长度
plt.绘图([x0,x1],[y0,y1],color='navy')
返回x1,y1
定义希尔伯特曲线图(x、y、长度、方向、奇偶性):
方向=右转(方向,奇偶性)
x、 y=绘制线(x,y,方向,长度)
方向=左转(方向,奇偶校验)
x、 y=绘制线(x,y,方向,长度)
方向=左转(方向,奇偶校验)
x、 y=绘制线(x,y,方向,长度)
方向=右转(方向,奇偶性)
返回x、y、方向
def hilbert_曲线(x、y、长度、方向、奇偶性、级别):
如果级别==1:
x、 y,方向=希尔伯特曲线图(x,y,长度,方向,奇偶性)
其他:
方向=右转(方向,奇偶性)
x、 y,方向=希尔伯特曲线(x,y,长度,方向,-奇偶性,水平-1)
x、 y=绘制线(x,y,方向,长度)
方向=左转(方向,奇偶校验)
x、 y,方向=希尔伯特曲线(x,y,长度,方向,奇偶性,级别-1)
x、 y=绘制线(x,y,方向,长度)
x、 y,方向=希尔伯特曲线(x,y,长度,方向,奇偶性,级别-1)
方向=左转(方向,奇偶校验)
x、 y=绘制线(x,y,方向,长度)
x、 y,方向=希尔伯特曲线(x,y,长度,方向,-奇偶性,水平-1)
方向=右转(方向,奇偶性)
返回x、y、方向
希尔伯特曲线(x=-200,y=200,长度=5,方向=(1,0),奇偶性=1,水平=5)
plt.轴(“相等”)#在x和y方向上的长度相同
plt.show()