用 turtle 绘制一颗樱花树,大概长下面这样
1. 导入库
import turtle
import random
- turtle: 用于绘图的库,提供了简单的图形绘制接口。
- random: 用于生成随机数,增加绘制树枝和花瓣的自然效果。
2. 设置画布
turtle.bgcolor("skyblue")
t = turtle.Turtle()
t.speed(0)
- turtle.bgcolor(“skyblue”): 设置背景颜色为天空蓝。
- t = turtle.Turtle(): 创建一个
Turtle
对象,用于绘图。 - t.speed(0): 设置绘制速度为最快(0表示最快)。
3. 绘制树的函数
def draw_tree(branch_len, t):
if branch_len < 10:
t.color("pink")
t.begin_fill()
t.circle(5)
t.end_fill()
t.color("brown")
return
- draw_tree: 递归函数,用于绘制树。
- if branch_len < 10: 当分支长度小于10时,绘制花瓣。
- t.color(“pink”): 设置颜色为粉色,准备绘制花瓣。
- t.circle(5): 绘制半径为5的圆,模拟樱花。
- return: 结束当前递归,回到上一级。
4. 绘制树枝
t.pensize(branch_len / 10)
t.forward(branch_len)
- t.pensize(branch_len / 10): 根据分支长度设置笔的粗细。
- t.forward(branch_len): 向前移动画笔,绘制当前树枝。
5. 递归绘制左右分支
t.right(20)
draw_tree(branch_len - random.randint(10, 15), t)
t.left(40)
draw_tree(branch_len - random.randint(10, 15), t)
t.right(20)
t.backward(branch_len)
- t.right(20): 向右转20度,为右侧分支准备。
- draw_tree(…): 递归调用绘制右侧分支,长度随机减少。
- t.left(40): 向左转40度,为左侧分支准备。
- draw_tree(…): 递归调用绘制左侧分支,长度随机减少。
- t.right(20): 回到原来的方向。
- t.backward(branch_len): 回到当前树枝的起点。
6. 主程序
def main():
t.color("brown")
t.left(90) # 面朝上
t.up()
t.goto(0, -200) # 向上移动到中心位置
t.down()
t.forward(100) # 向上移动
draw_tree(100, t)
turtle.done()
- t.color(“brown”): 设置树干颜色为棕色。
- t.left(90): 画笔向左旋转90度,面朝上。
- t.up(): 抬起画笔,移动时不绘制。
- t.goto(0, -200): 移动到坐标(0, -200),调整树的位置。
- t.down(): 放下画笔,准备绘制。
- t.forward(100): 向上绘制树干的底部。
- draw_tree(100, t): 调用绘制树的函数,从长度为100开始。
- turtle.done(): 完成绘制,保持窗口开启。
总代码如下:
import turtle
import random
# 设置画布
turtle.bgcolor("skyblue")
t = turtle.Turtle()
t.speed(0)
# 绘制树的函数
def draw_tree(branch_len, t):
if branch_len < 10:
# 画花瓣
t.color("pink")
t.begin_fill()
t.circle(5)
t.end_fill()
t.color("brown")
return
# 绘制树枝
t.pensize(branch_len / 10)
t.forward(branch_len)
# 右侧分支
t.right(20)
draw_tree(branch_len - random.randint(10, 15), t)
# 左侧分支
t.left(40)
draw_tree(branch_len - random.randint(10, 15), t)
# 返回到主干
t.right(20)
t.backward(branch_len)
# 主程序
def main():
t.color("brown")
t.left(90) # 面朝上
t.up()
t.goto(0, -400) # 向上移动到中心位置
t.down()
t.forward(100) # 向上移动
draw_tree(100, t)
turtle.done()
if __name__ == "__main__":
main()
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容