此文章以课本为基础
首先我们把turtle的基本库函数介绍一下
1 turtle.penup() 抬起画笔 turtle.goto() 将第一笔画在哪个坐标
2 turtle.down() 放下画笔
3 turtle,pensize() 改变线条大小
4 turtle.pencolor() 改变线条颜色颜色
5 turtle.forward(distnce) 向前进
6 turtle.left(angle) 向左转度数
7 turtle.right(angle) 向右转度数
8 turtle.setup() 设置窗口大小
注意:turtle初始方向是向右
初始设置代码
我们先写一下初始设置代码
import time #导入时间库
import turtle #导入海龟
turtle.color("green") #初始设置
turtle.setup(800,500)
turtle.penup()
turtle.goto(-300,100)
turtle.pendown()
turtle.pensize(3)
a=[0,60,-120,60] #这个是角度,一会我们会用到
解释:我们这里解释一下为什么是-120度,因为我们下面为了方便会一直让海龟的方向一直向左转,当我们到下面画红线的地方要向右边转120度,我们用向左表示就是转-120度了
解释:time库,为了看到最后图片的效果,我们想让程序执行完后,停一会,用time.sleep(time)。
既然是写递归,我们要设置一个if判断,去限制递归的条件,我们设置一个n为循环次数具体代码我们可以如下
def kote(len,n,ang):#定义kote函数,里面有参数:len长度,n循环限制参数(科赫曲线阶数),ang角度
if n==0: #n的限制条件
turtle.forward(len) #前进画笔
else:
for i in ang: #将角度列表[0,60,-120,60]传到循环参数i里面
turtle.left(i)#海龟旋转i度
kote(len/3,n-1,ang) #递归调用自身,长度会根据n阶数依次变小
以一阶科赫曲线为例现在我们开始递归吧!!!(保姆级解释开始了)
当我们调用函数传入参数kote(300,1,a)我们传入了300长度,1阶,a角度列表
此时我们进入判断,进入else语句——进入for循环——i循环参数接收角度列表——此时i=0——
海龟向左转0度——进入递归!调用自己传入参数(长度/3=100,n-1=0,传入角度列表)——进入判断语句——进入if语句——此时n==0——海龟向前走100——结束此次函数,回到之前未执行完的for语句中——此时i=60海龟向左转向60度——第二次进入kote函数(100,1,角度列表)调用自己依然是前进100——结束此次调用——回到for循环语句——此时i=-120——海龟向右旋转120度——第三次进入kote函数调用自己(100,1,角度列表)——海龟前进100——回到for循环——此时i=60——海龟向左旋转60度——第四次(最后一次)进入kote函数(100,1,角度列表)——前进100——回到for循环——跳出for循环——结束程序
运行程序我们可以得到下面的图片:
如果我们把n(阶数)写为2,依照上面的思想我们可以得到下面图片:
三阶科赫曲线:
如果我们将每次得到的图片向右旋转120度,重复三次就得到了我们喜欢的雪花:
具体代码如下:
import time
import turtle
turtle.color("green")
turtle.setup(800,500)
turtle.penup()
turtle.goto(-300,100)
turtle.pendown()
turtle.pensize(3)
a=[0,60,-120,60]
def kote(len,n,ang):
if n==0:
turtle.forward(len)
else:
for i in ang:
turtle.left(i)
kote(len/3,n-1,ang)
kote(300,3,a)
turtle.right(120)
kote(300,3,a)
turtle.right(120)
kote(300,3,a)
time.sleep(2)