调到最好状态的效果图就是这样的。
代码如下:
代码
from turtle import * from random import * from math import * def tree(n,l): pd()#下笔 #阴影效果 t = cos(radians(heading()+45))/8+0.25 pencolor(t,t,t) pensize(n/3) forward(l)#画树枝 if n>0: b = random()*15+10 #右分支偏转角度 c = random()*15+10 #左分支偏转角度 d = l*(random()*0.25+0.7) #下一个分支的长度 #右转一定角度,画右分支 right(b) tree(n-1,d) #左转一定角度,画左分支 left(b+c) tree(n-1,d) #转回来 right(c) else: #画叶子 right(90) n=cos(radians(heading()-45))/4+0.5 ran=random() #这里相比于原来随机添加了填充的圆圈,让樱花叶子看起来更多一点 if(ran>0.7): begin_fill() circle(3) fillcolor('pink') #把原来随机生成的叶子换成了统一的粉色 pencolor("pink") circle(3) if(ran>0.7): end_fill() left(90) #添加0.3倍的飘落叶子 if(random()>0.7): pu() #飘落 t = heading() an = -40 +random()*40 setheading(an) dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2) forward(dis) setheading(t) #画叶子 pd() right(90) n = cos(radians(heading()-45))/4+0.5 pencolor(n*0.5+0.5,0.4+n*0.4,0.4+n*0.4) circle(2) left(90) pu() #返回 t=heading() setheading(an) backward(dis) setheading(t) pu() backward(l)#退回 if __name__ == '__main__': bgcolor(0.856,0.8255,0.8882)#设置背景色(把灰色换成淡紫色) ht()#隐藏turtle speed(10)#速度 1-10渐进,0 最快 tracer(0,0) pu()#抬笔 backward(50) left(90)#左转90度 pu()#抬笔 backward(300)#后退300 tree(12,100)#递归12层 done()
原理
1. 二叉树
大家自习观察就能发现我们的树枝都是两两分叉的,这就是通过二叉树的层层递归建立实现的,中间其实并不复杂,找到合适的层级数在进行构建二叉树再配合turtle进行绘画就可以啦。
例如下面当递归层数较少时候,我们就很容易发现是二叉树的构成,在构建时候再将每个树枝的长度都随机一下就可以案例。
2. python的turtle库
真棵樱花树的绘制效果是通过 Python 中的 turtle 来实现的,Python 的强大之处在于有许多很强大的库,turtle就是其中之一,是 Python 自带的一个库。
基本入门可以参考这篇文章:https://zhuanlan.zhihu.com/p/64594462
详细内容请查看官方文档:https://docs.python.org/zh-cn/3/library/turtle.html
递归效果探究
五层
当递归五层时就是这个熊样,很秃然
七层
十层
十二层(最好)
十四层
这里就太多了,显得不大好看了,程序运行等了几分钟才画出来。