• 樱花飘落


    屏幕录制 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.25
    	pencolor(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.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)
    

    如果树枝的层次n不大于0,就绘制叶子。叶子是随机填充的粉色圆圈。

    # 添加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)  # 退回
    

    将画笔抬起,并退回到上一级树枝的起点。

    定义樱花绘制函数

    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的事件循环,这样程序会一直运行,直到用户关闭图形窗口。

  • 相关阅读:
    DirectX3D 虚拟现实项目 三维物体的光照及着色(五个不同着色效果的旋转茶壶)
    linux进行rbash逃逸的方法
    MySQ 学习笔记
    C# 要被淘汰了?!
    Linux实验一(常见命令与场景) 基本命令&&权限管理
    lnmp 环境搭建wordpress
    浅析linux 内核 高精度定时器(hrtimer)实现机制(一)
    TwinCAT3加不上路由ADS的几种可能
    java实现课程表 II
    MapReduce【MapTask和ReduceTask的工作机制】
  • 原文地址:https://blog.csdn.net/2303_77556681/article/details/139862458