文章目录
- 樱花飘落
- 导入模块和设置屏幕
- 定义树枝绘制函数
- 计算树枝参数
- 绘制左右分支
- 绘制树叶和飘落效果
- 定义樱花绘制函数
- 绘制樱花并定时重复
- 设置屏幕和绘制树
- 开始樱花动画
- 启动事件循环
屏幕录制 2024-06-21 155836
樱花飘落
导入模块和设置屏幕
通过递归函数tree绘制了一棵分形的樱花树,并通过draw_sakura函数实现了樱花飘落的动画效果。程序使用了Turtle库的基本命令,如forward、right、left、circle等来绘制图形,并通过ontimer实现了定时重复执行某个函数的功能。
from turtle import *
from random import *
from math import *
导入Turtle图形库、random和math模块。
定义树枝绘制函数
def tree(n, l):pd() # 下笔# 阴影效果t = cos(radians(heading() + 45)) / 8 + 0.25pencolor(t, t, t)pensize(n / 3)forward(l) # 画树枝
定义一个绘制树枝的函数tree,参数n代表树枝分叉的层次,l代表树枝的长度。pd()是Turtle库的命令,表示将画笔放下(开始绘制)。
计算树枝参数
if n > 0:b = random() * 15 + 10 # 右分支偏转角度c = random() * 15 + 10 # 左分支偏转角度d = l * (random() * 0.25 + 0.7) # 下一个分支的长度
如果树枝的层次n大于0,就计算左右分支的角度和下一个分支的长度。
绘制左右分支
# 右转一定角度,画右分支right(b)tree(n - 1, d)# 左转一定角度,画左分支left(b + c)tree(n - 1, d)# 转回来right(c)
通过递归调用tree函数来绘制左右分支。
绘制树叶和飘落效果
else:# 画叶子right(90)n = cos(radians(heading() - 45)) / 4 + 0.5ran = random()# 这里相比于原来随机添加了填充的圆圈,让樱花叶子看起来更多一点if (ran > 0.7):begin_fill()circle(3)fillcolor('pink')# 把原来随机生成的叶子换成了统一的粉色pencolor("pink")circle(3)if (ran > 0.7):end_fill()left(90)
如果树枝的层次n不大于0,就绘制叶子。叶子是随机填充的粉色圆圈。
# 添加0.3倍的飘落叶子if (random() > 0.7):pu()# 飘落t = heading()an = -40 + random() * 40setheading(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.5pencolor(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) # 退回
将画笔抬起,并退回到上一级树枝的起点。
定义樱花绘制函数
def draw_sakura():# 随机生成樱花的位置和颜色x = randrange(-600, 600)y = randrange(-600, 600)n = random()pencolor(n * 0.5 + 0.5, 0.4 + n * 0.4, 0.4 + n * 0.4)
定义一个绘制樱花的函数draw_sakura,随机生成樱花的位置和颜色。
绘制樱花并定时重复
# 移动到随机位置并绘制樱花up()goto(x, y)down()begin_fill()circle(2)fillcolor('pink')end_fill()up()# 设置ontimer以便在一段时间后再次调用此函数ontimer(draw_sakura, 50)
移动到随机位置,绘制一个填充为粉色的圆作为樱花,并设置一个定时器ontimer,这样在50毫秒后会再次调用draw_sakura函数,从而产生樱花飘落的效果。
设置屏幕和绘制树
# 设置屏幕
setup(800, 600)
bgcolor(0.956, 0.9255, 0.9882)
ht()
speed(0)
tracer(0, 0)
设置屏幕的大小为800x600像素,背景颜色为浅色调,隐藏turtle的箭头,设置绘制速度为最快,并且关闭动画效果(即立即显示绘制结果)。
# 绘制树
pu()
backward(50)
left(90)
pu()
backward(300)
tree(12, 100)
移动到起始位置,并调用tree函数开始绘制树,树枝的层次为12,初始长度为100。
开始樱花动画
# 开始绘制樱花动画
draw_sakura()
调用draw_sakura函数开始绘制樱花动画。
启动事件循环
# 启动事件循环
done()
启动Turtle的事件循环,这样程序会一直运行,直到用户关闭图形窗口。