用 turtle 绘制一颗樱花树-繁依Fanyi

用 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
喜欢就支持一下吧
点赞179 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容