Python – 使用Turtle的希尔伯特曲线
分形是一种重复的曲线或图形。它由一个递归模式组成,其重复程度达到所需的嵌套程度。Turtle模块中提供了Turtle图形,用于在Python中绘制各种形状和图案。
希尔伯特曲线是由一连串按不同方向排列的U形曲线连接而成的曲线。这些U形曲线以一定的步长距离排列。
让我们来研究一个一级希尔伯特曲线。下面的步骤将画出一条简单的U型曲线。
让y=90度
1.向右旋转y度
2.移动步数大小
3.向左旋转y度
4.移动步数大小
5.向左旋转y度
6.移动步数大小
7.向右旋转y度
让我们研究并尝试理解2级希尔伯特曲线。
同样,我们假设Turtle的指针最初指向右边。下面的步骤可以用来绘制曲线。
1.向右旋转90度
2.在1级创建一条旋转为-y度(即逆时针方向的y度)的希尔伯特曲线。
3.移动步数大小
4.向右旋转y度
5.创建一条旋转了y度的1级希尔伯特曲线(即顺时针方向的y度)。
6.向左旋转y度。
7.移动步长
8.创建一条旋转了-y度的1级希尔伯特曲线
9.向右旋转y度
本节中使用的Turtle方法如下 :
- forward() :用于在Turtle的方向上向前移动一个给定的距离。
- backward() :用于在Turtle的方向上向后移动一定的距离。
- left() :用于将Turtle向左旋转一个指定的角度。
- right() :用于将Turtle向右旋转一个指定的角度。
- goto() :用于将Turtle移动到指定的位置((x,y)坐标)。
- penup() :用于指定在移动时不作画。
- pendown() :用于指定在移动时进行绘图。
- done() :用于指定Turtle的工作已经完成。
希尔伯特曲线的代码如下。
from turtle import *
def hilbert(level, angle, step):
# Input Parameters are numeric
# Return Value: None
if level == 0:
return
right(angle)
hilbert(level-1, -angle, step)
forward(step)
left(angle)
hilbert(level-1, angle, step)
forward(step)
hilbert(level-1, angle, step)
left(angle)
forward(step)
hilbert(level-1, -angle, step)
right(angle)
def main():
level = int(input())
size = 200
penup()
goto(-size / 2.0, size / 2.0)
pendown()
# For positioning turtle
hilbert(level, 90, size/(2**level-1))
done()
if __name__=='__main__':
main()