当前位置: 首页 > news >正文

Python七彩花朵

七彩花朵

系列文章

序号直达链接
Tkinter
1Python李峋同款可写字版跳动的爱心
2Python跳动的双爱心
3Python蓝色跳动的爱心
4Python动漫烟花
5Python粒子烟花
Turtle
1Python满屏飘字
2Python蓝色流星雨
3Python金色流星雨
4Python漂浮爱心
5Python爱心光波①
6Python爱心光波②
7Python满天繁星
8Python五彩气球
9Python白色飘雪
10Python七彩花朵
11Python 3D星空
12Python大雪纷飞
13Python一闪一闪亮星星
14Python爱心泡泡
15Python爱心射线
16Python圣诞礼物
17Python礼物圣诞树
18Python浪漫星空
19Python飞舞蝙蝠
20Python万圣礼物
21Python蓝色飘雪
Pygame
1Python跨年烟花
2Python炫酷烟花
3Python黑客帝国字母雨
敬请期待……

写在前面

Python绘制七彩花朵动画的完整代码。

技术需求

  1. Turtle 图形库

    • 利用 turtle 模块实现图形绘制与动画控制。作为 Python 的标准图形化编程库,turtle 提供了直观的绘图功能。
    • 通过 Pen 类创建画笔对象,灵活调整其位置、颜色、方向和路径,以绘制花朵及其动态效果。
  2. 随机数生成

    • 借助 random 模块生成随机数,使花朵的位置、颜色、大小及运动速度等属性随机化,提升动画的多样性和趣味性。
    • random.randint()random.uniform() 分别用于生成整数和浮点数,确保花朵属性的随机分配。
  3. 数学函数

    • 运用 math 模块中的 sin() 函数,模拟花朵的左右摆动。借助正弦波,实现花朵在水平方向上的周期性运动,营造自然漂浮的效果。
  4. 面向对象编程(OOP)

    • 定义 Flower 类,每朵花均为该类的实例。此类包含花朵的属性(如位置、颜色、大小)和方法(如移动、绘制),赋予每个花朵独立的行为和状态。
  5. 动画与画面更新

    • 使用 tu.tracer(0)tu.update() 调节动画更新频率,消除画面闪烁,确保动画流畅。
    • 在每次画面更新前调用 t.clear() 清除先前内容,实现动态变化效果。
  6. 无限循环与事件驱动

    • 采用 while True 实现无限循环,持续更新和绘制花朵,保证动画连续运行。
    • tu.mainloop() 启动主事件循环,维持图形窗口开启状态,直至用户关闭窗口。

完整代码

import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['red','skyblue','orange','yellow','lime','pink','violet']
class Flower():    #每个花朵(花朵类)def __init__(self):self.r = ra.randint(8,12)        #花朵的半径self.x = ra.randint(-1000,1000)   #花朵的横坐标self.y = ra.randint(-500,500)     #花朵的纵坐标self.f = ra.uniform(-3.14,3.14)   #花朵左右移动呈正弦函数self.speed = ra.randint(5,10)     #花朵移动速度self.color = ra.choice(colors)    #花朵的颜色self.outline = 1                  #花朵的外框大小(可不要)def move(self):                    #花朵移动函数if self.y >= -500:            #当花朵还在画布中时self.y -= self.speed     #设置上下移动速度self.x += self.speed * math.sin(self.f)    #设置左右移动速度self.f += 0.1            #可以理解成标志,改变左右移动的方向else:                        #当花朵漂出了画布时,重新生成一个花朵self.r = ra.randint(8,12)self.x = ra.randint(-1000,1000)self.y = 500self.f = ra.uniform(-3.14,3.14)self.speed = ra.randint(5,10)self.color = ra.choice(colors)self.outline = 1
……

代码分析

这段代码利用 Python 的 Turtle 图形库和随机模块,通过定义一个花朵类来模拟屏幕上随机漂浮的花朵。核心在于主循环中随机生成花朵的位置、颜色、大小及运动方式,使花朵呈现出自由飘动的效果。以下是代码的详细分析。

1. 模块导入与初始设置

import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['red', 'skyblue', 'orange', 'yellow', 'lime', 'pink', 'violet']
  • turtle 模块用于图形绘制和动画,此处别名为 tu
  • random 模块生成随机数,支持花朵的随机生成与运动。
  • math 模块提供数学函数,如正弦函数 (math.sin) 控制花朵的左右移动。
  • tu.setup(1.0, 1.0) 设置画布为全屏模式。
  • t = tu.Pen() 创建 Pen 对象用于绘图,t.ht() 隐藏画笔箭头。
  • colors 列表存储花朵可能的颜色,供随机选择。

2. 花朵类(Flower)

花朵类是动画的核心,描述每朵花的属性和行为。

2.1 构造方法(__init__

class Flower:def __init__(self):self.r = ra.randint(8, 12)        # 花朵半径self.x = ra.randint(-1000, 1000)   # 横坐标self.y = ra.randint(-500, 500)     # 纵坐标self.f = ra.uniform(-3.14, 3.14)   # 左右移动角度self.speed = ra.randint(5, 10)     # 移动速度self.color = ra.choice(colors)     # 颜色self.outline = 1                   # 外框大小
  • self.r 设定花朵半径,范围 8 至 12。
  • self.xself.y 分别设定横纵坐标,范围分别为 -1000 至 1000 和 -500 至 500。
  • self.f 决定左右摇动程度,范围 -π 至 π。
  • self.speed 设定移动速度,范围 5 至 10。
  • self.color 随机选择颜色。
  • self.outline 固定外框大小为 1。

2.2 移动方法(move

该方法更新花朵坐标,通过正弦函数实现水平波动运动。

  • self.y -= self.speed 实现向下移动。
  • self.x += self.speed * math.sin(self.f) 通过正弦函数实现周期性左右摆动。
  • self.f += 0.1 更新方向,改变摆动周期。
  • self.y < -500,表示花朵移出画布,重新生成并重置纵坐标为 500。

2.3 绘制方法(draw

控制是否绘制路径,移动到初始位置,设置方向和颜色,填充形状,绘制花瓣。

  • t.penup()t.pendown() 控制绘制路径。
  • t.goto(self.x, self.y) 移动至初始位置。
  • t.setheading(self.x) 设置方向。
  • t.color(self.color) 设置颜色。
  • t.begin_fill()t.end_fill() 填充形状。
  • for i in range(5): 循环绘制花瓣,使用 t.circle(self.r, extent=144) 绘制圆弧形花瓣,形成花朵整体形态。

3. 主程序

  • Flowers 列表存储所有花朵对象。
  • for i in range(100): 循环创建 100 个花朵对象。
  • tu.bgcolor('black') 设置背景色为黑色,突出花朵颜色。

4. 动画循环

  • tu.tracer(0) 禁用自动更新,避免闪烁,提高效率。
  • t.clear() 清除旧图形。
  • for i in range(50): 控制每帧 50 朵花的移动和绘制。
  • Flowers[i].move()Flowers[i].draw() 分别移动和绘制花朵。
  • tu.update() 更新画面显示花朵。

5. 事件循环

  • tu.mainloop() 启动主事件循环,持续显示窗口并响应输入。

6. 总结

此代码通过随机生成、运动和绘制花朵,实现了动态漂浮效果。每次运行时花朵表现不同,结合 turtle 库和 random 模块,展示了 Python 在图形和动画编程中的能力。

写在后面

我是一只有趣的兔子,感谢你的喜欢!

http://www.lryc.cn/news/584922.html

相关文章:

  • C++——this关键字和new关键字
  • 专题 字符串 Unicode
  • 排序算法与前端交互优化
  • Elasticsearch混合搜索深度解析(下):执行机制与完整流程
  • JAVA JVM垃圾收集
  • 【C语言网络编程】HTTP 客户端请求(域名解析过程)
  • Django老年健康问诊系统 计算机毕业设计源码32407
  • 华为VS格行VS中兴VS波导随身WIFI6怎么选?流量卡OR随身WIFI,长期使用到底谁更香?
  • 优学教育实战03跟进管理
  • 亿级流量下的缓存架构设计:Redis+Caffeine多级缓存实战
  • 力扣-142.环形链表 II
  • 学习笔记(34):matplotlib绘制图表-房价数据分析与可视化
  • Anaconda及Conda介绍及使用
  • 基于生产者消费者模型的线程池【Linux操作系统】
  • React之旅-05 List Key
  • 《探索电脑麦克风声音采集多窗口实时可视化技术》
  • 基于MuJoCo的宇树科技G1机器人基础动作仿真研究
  • Java 大视界 -- Java 大数据在智能医疗远程手术机器人操作数据记录与分析中的应用(342)
  • 两台电脑通过网线直连形成局域网,共享一台wifi网络实现上网
  • 项目开发日记
  • 【web应用】若依框架中,使用Echarts导出报表为PDF文件
  • Kafka——应该选择哪种Kafka?
  • XPath 语法【Web 自动化-定位方法】
  • 【操作系统】线程
  • [特殊字符] 扫描式处理:Python 自动提取 PDF 中关键词相关表格并导出为 Excel
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(下)
  • lodash不支持 Tree Shaking 而 lodash-es可以
  • 零基础入门指南:华为数通认证体系详解
  • 代码随想录|图论|10水流问题
  • 视频人脸处理——人脸面部动作提取