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

Python画图3个小案例之“一起看流星雨”、“爱心跳动”、“烟花绚丽”

在这里插入图片描述
源码如下:

import turtle  # 导入turtle库,用于图形绘制
import random  # 导入random库,生成随机数
import math  # 导入math库,进行数学计算turtle.setup(1.0, 1.0)  # 设置窗口大小为屏幕大小
turtle.title("流星雨动画")   # 设置窗口标题
turtle.bgcolor('black')  # 设置背景颜色为黑色t = turtle.Turtle()  # 创建一个画笔对象
t.hideturtle()  # 隐藏画笔,不显示画布的形状
t.pensize(1)    # 设置画笔的大小# 定义流星的颜色列表
colors = ['gold', 'yellow', 'orange', 'green']  # 金色class Meteor:  # 定义流星类def __init__(self):  # 初始化方法,创建每颗流星时调用self.r = random.randint(50, 100)    # 随机生成流星的半径self.k = random.uniform(2, 4)   # 随机生成角度参数self.x = random.randint(-1000, 1000)  # 随机生成流星的x坐标self.y = random.randint(-500, 500)  # 随机生成流星的y坐标self.speed = random.randint(5, 10)  # 随机生成流星的移动速度self.color = random.choice(colors)  # 随机选择流星的颜色def meteor(self):  # 绘制流星的方法# 移动画笔到指定的坐标位置处t.penup()t.goto(self.x, self.y)t.pendown()# 设置流星的颜色t.begin_fill()t.fillcolor(self.color)# 开始绘制流星t.setheading(-30)  # 设置流星的朝向t.right(self.k)  # 根据随机角度右转t.forward(self.r)  # 沿直线前进一定长度t.left(self.k)  # 左转回到垂直方向t.circle(self.r * math.sin(math.radians(self.k)), 180)  # 绘制半圆弧t.left(self.k)  # 再次左转恢复角度t.forward(self.r)  # 沿直线前进相同长度以闭合流星形状t.end_fill()  # 结束填充def move(self):  # 更新流星位置的方法if self.y >= -500:  # 当流星的y坐标大于等于-500时self.y -= self.speed  # 减小流星y坐标的大小,将画笔向下移动self.x += 2 * self.speed  # 增加流星x坐标的大小,将画笔向右移动else:  # 当流星的y坐标小于-500时self.r = random.randint(50, 100)  # 重新设置流星的半径self.k = random.uniform(2, 4)  # 重新设置角度参数self.x = random.randint(-2000, 1000)  # 重新设置流星的x坐标self.y = 500  # 重新设置流星的y坐标self.speed = random.randint(5, 10)  # 重新设置流星的速度self.color = random.choice(colors)  # 重新设置流星的颜色# 创建一个流星列表,用来存储流星实例
Meteors = []
for i in range(100):Meteors.append(Meteor())# 进行无限循环,模拟流星雨动画
while True:turtle.tracer(0)  # 关闭tracer,提高性能t.clear()  # 清除画布内容for i in range(100):Meteors[i].move()  # 更新每颗流星的位置Meteors[i].meteor()  # 重新绘制每颗流星turtle.update()  # 更新屏幕显示内容

在这里插入图片描述
源码如下:

import random
from math import sin, cos, pi, log
from tkinter import *CANVAS_WIDTH = 640
CANVAS_HEIGHT = 480
CANVAS_CENTER_X = CANVAS_WIDTH / 2
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2
IMAGE_ENLARGE = 11
HEART_COLOR = "#FFC0CB"  # ff2121def heart_function(t, shrink_ratio: float = IMAGE_ENLARGE):x = 16 * (sin(t) ** 3)y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))x *= shrink_ratioy *= shrink_ratiox += CANVAS_CENTER_Xy += CANVAS_CENTER_Yreturn int(x), int(y)def scatter_inside(x, y, beta=0.15):ratio_x = - beta * log(random.random())ratio_y = - beta * log(random.random())dx = ratio_x * (x - CANVAS_CENTER_X)dy = ratio_y * (y - CANVAS_CENTER_Y)return x - dx, y - dydef shrink(x, y, ratio):force = -1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.6)  # 这个参数...dx = ratio * force * (x - CANVAS_CENTER_X)dy = ratio * force * (y - CANVAS_CENTER_Y)return x - dx, y - dydef curve(p):return 2 * (2 * sin(4 * p)) / (2 * pi)class Heart:def __init__(self, generate_frame=20):self._points = set()  # 原始爱心坐标集合self._edge_diffusion_points = set()  # 边缘扩散效果点坐标集合self._center_diffusion_points = set()  # 中心扩散效果点坐标集合self.all_points = {}  # 每帧动态点坐标self.build(2000)self.random_halo = 1000self.generate_frame = generate_framefor frame in range(generate_frame):self.calc(frame)def build(self, number):for _ in range(number):t = random.uniform(0, 2 * pi)x, y = heart_function(t)self._points.add((x, y))for _x, _y in list(self._points):for _ in range(3):x, y = scatter_inside(_x, _y, 0.05)self._edge_diffusion_points.add((x, y))point_list = list(self._points)for _ in range(4000):x, y = random.choice(point_list)x, y = scatter_inside(x, y, 0.17)self._center_diffusion_points.add((x, y))@staticmethoddef calc_position(x, y, ratio):force = 1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.520)  # 魔法参数dx = ratio * force * (x - CANVAS_CENTER_X) + random.randint(-1, 1)dy = ratio * force * (y - CANVAS_CENTER_Y) + random.randint(-1, 1)return x - dx, y - dydef calc(self, generate_frame):ratio = 10 * curve(generate_frame / 10 * pi)  # 圆滑的周期的缩放比例halo_radius = int(4 + 6 * (1 + curve(generate_frame / 10 * pi)))halo_number = int(3000 + 4000 * abs(curve(generate_frame / 10 * pi) ** 2))all_points = []heart_halo_point = set()for _ in range(halo_number):t = random.uniform(0, 2 * pi)x, y = heart_function(t, shrink_ratio=11.6)x, y = shrink(x, y, halo_radius)if (x, y) not in heart_halo_point:heart_halo_point.add((x, y))x += random.randint(-14, 14)y += random.randint(-14, 14)size = random.choice((1, 2, 2))all_points.append((x, y, size))for x, y in self._points:x, y = self.calc_position(x, y, ratio)size = random.randint(1, 3)all_points.append((x, y, size))for x, y in self._edge_diffusion_points:x, y = self.calc_position(x, y, ratio)size = random.randint(1, 2)all_points.append((x, y, size))for x, y in self._center_diffusion_points:x, y = self.calc_position(x, y, ratio)size = random.randint(1, 2)all_points.append((x, y, size))self.all_points[generate_frame] = all_pointsdef render(self, render_canvas, render_frame):for x, y, size in self.all_points[render_frame % self.generate_frame]:render_canvas.create_rectangle(x, y, x + size, y + size, width=0, fill=HEART_COLOR)def draw(main: Tk, render_canvas: Canvas, render_heart: Heart, render_frame=0):render_canvas.delete('all')render_heart.render(render_canvas, render_frame)main.after(160, draw, main, render_canvas, render_heart, render_frame + 1)if __name__ == '__main__':root = Tk()  # 一个Tkcanvas = Canvas(root, bg='black', height=CANVAS_HEIGHT, width=CANVAS_WIDTH)canvas.pack()heart = Heart()draw(root, canvas, heart)root.mainloop()

在这里插入图片描述
啊这个烟花有待优化啊,哈哈,丑版烟花5毛钱特效。

import turtle  # 导入turtle库,用于图形绘制
import random  # 导入random库,生成随机数
import math  # 导入math库,进行数学计算# 设置窗口大小和背景颜色
turtle.setup(1.0, 1.0)
turtle.title("烟花绽放动画")
turtle.bgcolor('black')t = turtle.Turtle()
t.hideturtle()
t.pensize(1)# 定义烟花的颜色列表
colors = ['red', 'blue', 'green', 'yellow', 'purple', 'orange']class Firework:def __init__(self):self.x = random.randint(-400, 400)self.y = random.randint(-300, 300)self.color = random.choice(colors)self.particles = []self.exploded = Falseself.lifetime = random.randint(50, 100)self.create_particles()def create_particles(self):for _ in range(random.randint(50, 100)):angle = random.uniform(0, 2 * math.pi)speed = random.uniform(1, 6)dx = math.cos(angle) * speeddy = math.sin(angle) * speedself.particles.append([self.x, self.y, dx, dy])def update(self):if not self.exploded:self.lifetime -= 1if self.lifetime <= 0:self.explode()else:for particle in self.particles:particle[0] += particle[2]particle[1] += particle[3]particle[3] -= 0.1  # gravity effectdef explode(self):self.exploded = Truedef draw(self):if not self.exploded:t.penup()t.goto(self.x, self.y)t.dot(10, self.color)  # 放大烟花点的大小else:for particle in self.particles:t.penup()t.goto(particle[0], particle[1])t.dot(5, self.color)  # 放大光粒的半径# 创建一个烟花列表,用来存储烟花实例
fireworks = [Firework() for _ in range(5)]# 进行无限循环,模拟烟花绽放动画
while True:turtle.tracer(0)  # 关闭tracer,提高性能t.clear()  # 清除画布内容for firework in fireworks:firework.update()  # 更新每颗烟花的状态firework.draw()  # 重新绘制每颗烟花turtle.update()  # 更新屏幕显示内容# 创建新的烟花实例以保持持续绽放效果if random.random() < 0.1:  # 控制新烟花出现的频率fireworks.append(Firework())# 移除已经爆炸并消失的烟花实例,防止内存泄漏fireworks = [fw for fw in fireworks if not (fw.exploded and all(p[3] <= -1 for p in fw.particles))]

喜欢的可以关注一下我哦,后续更精彩。

相关文章:

Python画图3个小案例之“一起看流星雨”、“爱心跳动”、“烟花绚丽”

源码如下&#xff1a; import turtle # 导入turtle库&#xff0c;用于图形绘制 import random # 导入random库&#xff0c;生成随机数 import math # 导入math库&#xff0c;进行数学计算turtle.setup(1.0, 1.0) # 设置窗口大小为屏幕大小 turtle.title("流星雨动画&…...

Knife4j配置 ▎使用 ▎教程 ▎实例

knife4j简介 支持 API 自动生成同步的在线文档:使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。 提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还支持在线测试.参数和格式都…...

电子电气架构 --- 车载芯片现状

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…...

Unity 二次元三渲二

三渲二 注意&#xff1a;Unity必须是2022.3LTS及以上和URP项目&#xff01;&#xff01;&#xff01; 下载三渲二插件 【如何将原神的角色导入Unity】全网最细致教程&#xff0c;全程干货。不使用任何收费插件&#xff0c;使用Spring Bone对头发和衣服进行物理模拟。_原神 步…...

echart实现地图数据可视化

文章目录 [TOC](文章目录) 前言一、基本地图展示2.数据可视化 总结 前言 最近工作安排使用echarts来制作图形报表&#xff0c;记录一下我的步骤&#xff0c;需求呈现一个地图&#xff0c;地图显示标签&#xff0c;根据业务指标值给地图不同省市填充不同颜色&#xff0c;鼠标放…...

网关三问:为什么微服务需要网关?什么是微服务网关?网关怎么选型?

文章整体介绍 本文旨在解答关于微服务网关的三个核心问题&#xff1a; 1&#xff09;为什么需要网关&#xff1f;也即在何种场景下应采用微服务网关以优化系统架构&#xff1b; 2&#xff09;什么是微服务网关&#xff1f;主要讲构成微服务网关的关键能力&#xff0c;包括但…...

Mybatis-plus解决兼容oracle批量插入

本博客借鉴网上很多大佬的答案&#xff0c;东拼西凑&#xff0c;最终在项目中完成批量插入&#xff0c;仅供参考~~~ 1. 自定义SQL注入器 新建一个名为EasySqlInjector的类&#xff0c;继承DefaultSqlInjector。 public class EasySqlInjector extends DefaultSqlInjector {O…...

Kaggle竞赛——灾难推文分类(Disaster Tweets)

目录 1. 准备工作2. 资源导入3. 数据处理4. 绘制词云图5. 数据可视化5.1 词数和字符数可视化5.2 元特征可视化5.3 类别可视化 6. 词元分析6.1 一元语法统计6.2 多元语法统计 7. 命名实体识别8. 推文主题提取9. 构建模型9.1 数据划分与封装9.2 模型训练与验证 10. 模型评估11. 测…...

SC2601音频编解码器可pin to pin兼容ES8311

SC2601 是一款低功耗单声道音频编解码器&#xff0c;具有全差分输出&#xff0c;支持在全差分配置下可编程模拟输入。可pin to pin兼容ES8311。 录音路径包含一个全差分输入&#xff0c;低噪声可编程增益放大器和自动增益控制&#xff08;ALC&#xff09;。在录音过程中,通过内…...

通用AT指令

1、查询SIM卡状态 ATCPIN?2、查询信号强度 ATCSQ //99,99 表示无信号3、查询IMEI ATCGSN4、查询4G/5G模式 ATCOPS? //7表示在4G模式&#xff0c;13表示在5G模式5、设置接入点 ATCGDCONT1,"IP","uninet" //联通 ATCGDCONT1,"IP","…...

二进制狼群算法

本文所涉及所有资源均在 传知代码平台 可获取。 目录 一、背景及意义介绍 背景 意义...

STL——list的介绍和使用

前言 本篇博客我们继续来介绍STL的内容&#xff0c;这次我们要介绍的是list这个容器&#xff0c;可以简单地理解为顺序表&#xff0c;当然和我们之前学过顺序表还是有区别的&#xff0c;具体内容大家可以继续往下阅读&#xff0c;下面进入正文。 1. list简介 1.list是一种可…...

二百七十六、ClickHouse——Hive和ClickHouse非常不同的DWS指标数据SQL语句

一、目的 在完成数据之后对业务指标进行分析&#xff0c;Hive和ClickHouseSQL真不一样 二、部分业务指标表 2.1 统计数据流量表1天周期 2.1.1 Hive中原有代码 2.1.1.1 Hive中建表语句 --1、统计数据流量表——动态分区——1天周期 create table if not exists hurys_d…...

Elasticsearch Date类型,时间存储相关说明

本文介绍了在SpringBoot中处理Elasticsearch中日期时间格式的问题。当时间输出为UTC格式并存在时区差异时&#xff0c;可通过设置字段格式如yyyy-MM-dd HH:mm:ss并指定时区为GMT8来解决。存储Date类型数据时&#xff0c;可以使用JSON库如json-lib, fastjson, Jackson或gson进行…...

mathorcup2024台风 我all in ai

三个问题&#xff0c;力大砖飞。 不建物理模型&#xff0c;直接all in好吧 第一个故意无监督 第二个LSTMCNN注意力&#xff0c;刚好时间空间 第三个在第二个上加了个transfomer &#xff0c;然后LSTM变双向&#xff0c;增加层数&#xff08;基线模型选的经验公式&#xff0c;少…...

android 10 后台启动activity

摘要&#xff1a;Android 10&#xff08;API 级别 29&#xff09;及更高版本会限制应用何时可以启动 activity 背景。这些限制有助于最大限度地减少对用户的干扰&#xff0c; 让用户能够更好地控制其屏幕上显示的内容。本文以此为出发点&#xff0c;基于展锐平台对系统代码进行…...

文案创作新思路:Python与文心一言API的完美结合

在这个信息爆炸的时代&#xff0c;内容创作似乎成了一项需要魔法才能完成的任务。不过&#xff0c;别担心&#xff01;今天&#xff0c;我们将向你介绍一种新的“魔法”工具——百度文心一言 API。这款大语言模型不仅能与人对话互动&#xff0c;还能高效便捷地协助你获取创意灵…...

CentOS 7 上安装 MySQL 8.0 教程

&#x1f31f; 你好 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

Chromium HTML5 新的 Input 类型url对应c++

一、Input 类型: url url 类型用于应该包含 URL 地址的输入域。 在提交表单时&#xff0c;会自动验证 url 域的值。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body&g…...

java多线程编程(二)一一>线程安全问题, 单例模式, 解决程线程安全问题的措施

引言&#xff1a; 如果多线程环境下代码运行的结果是符合我们预期的&#xff0c;即在单线程环境应该的结果&#xff0c;则说这个程序是线程安全的 线程安全问题的原因&#xff1a; 一.操作系统的随机调度 &#xff1a; 二.多个线程修改同一个变量&#xff1a; 三.修改操作不是…...

DASD-4B-Thinking与vLLM集成实战:5步完成AI问答系统部署

DASD-4B-Thinking与vLLM集成实战&#xff1a;5步完成AI问答系统部署 1. 为什么选择DASD-4B-Thinking vLLM组合 最近在星图GPU平台上试了几次DASD-4B-Thinking模型&#xff0c;说实话&#xff0c;第一感觉是它不像很多40亿参数的模型那样“凑数”。这个模型在多步推理任务上表…...

Phi-3-vision-128k-instruct 与MATLAB仿真结合:自动化分析仿真结果图表

Phi-3-vision-128k-instruct 与MATLAB仿真结合&#xff1a;自动化分析仿真结果图表 1. 引言&#xff1a;当仿真分析遇上AI视觉 每次跑完MATLAB仿真&#xff0c;面对满屏的波形图和频谱图&#xff0c;你是不是也经历过这样的场景&#xff1a;需要手动检查每个峰值的频率、计算…...

基于GDAL的温度植被干旱指数计算全流程(附完整Python代码)

基于GDAL的温度植被干旱指数计算全流程实战指南 遥感技术在现代农业、生态监测和灾害预警中扮演着关键角色。当我们面对广袤的土地&#xff0c;如何快速准确地评估土壤水分状况&#xff1f;温度植被干旱指数&#xff08;TVDI&#xff09;作为一种基于光学与热红外遥感数据的反…...

实时口罩检测-通用GPU优化部署:FP16精度下吞吐量提升2.1倍实测

实时口罩检测-通用GPU优化部署&#xff1a;FP16精度下吞吐量提升2.1倍实测 1. 项目概述 实时口罩检测是当前计算机视觉领域的重要应用场景&#xff0c;能够在公共场所自动识别人员是否佩戴口罩&#xff0c;为公共卫生管理提供技术支撑。今天我们要评测的是基于DAMO-YOLO框架的…...

Qwen3-0.6B-FP8在中小企业落地:2GB显存支撑多实例并发问答

Qwen3-0.6B-FP8在中小企业落地&#xff1a;2GB显存支撑多实例并发问答 1. 引言&#xff1a;小模型&#xff0c;大能量 如果你是一家中小企业的技术负责人&#xff0c;或者是一个独立开发者&#xff0c;想在自己的服务器上部署一个智能对话服务&#xff0c;是不是经常被高昂的…...

利用JDBG和SM37高效调试后台Job的实战指南

1. 为什么需要调试后台Job&#xff1f; 后台Job在SAP系统中扮演着重要角色&#xff0c;它们通常用于执行批量数据处理、报表生成等耗时操作。但问题来了&#xff1a;当这些Job在无人值守的状态下运行时&#xff0c;如果突然报错&#xff0c;我们该怎么快速定位问题&#xff1f;…...

Leather Dress Collection从零开始:LoRA微调入门——基于Leather Romper数据集

Leather Dress Collection从零开始&#xff1a;LoRA微调入门——基于Leather Romper数据集 1. 引言 你有没有想过&#xff0c;让AI帮你设计一套独一无二的皮革服装&#xff1f;或者你是个服装设计师&#xff0c;想快速生成不同款式的皮革服装概念图&#xff1f;今天我要分享的…...

智能体(Agent)是什么?2026年AI助理的入门指南

本文是我学习AI智能体&#xff08;Agent&#xff09;概念的第三周笔记&#xff0c;记录了从最初听到“Agent”这个词的困惑&#xff0c;到逐步理解它如何成为我的“数字同事”的过程。文章结构&#xff1a;定义→核心能力→应用场景→工具推荐→学习路径&#xff0c;适合AI入门…...

DeOldify快速上手指南:10分钟完成服务启动→上传→上色→保存全流程

DeOldify快速上手指南&#xff1a;10分钟完成服务启动→上传→上色→保存全流程 你是不是翻出家里的老照片&#xff0c;看着那些泛黄的黑白影像&#xff0c;总想着要是能恢复色彩该多好&#xff1f;以前这得找专业修图师&#xff0c;费时又费钱。现在&#xff0c;有个叫DeOldi…...

SVPWM在永磁同步电机控制中的实战应用:Ti库代码解析与优化

SVPWM在永磁同步电机控制中的实战应用&#xff1a;Ti库代码解析与优化 永磁同步电机&#xff08;PMSM&#xff09;凭借其高效率、高功率密度等优势&#xff0c;已成为工业驱动和新能源汽车领域的核心动力源。而空间矢量脉宽调制&#xff08;SVPWM&#xff09;作为PMSM控制的关键…...