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

创意编程:用Python打造粒子爱心烟花秀

创意编程:用Python打造粒子爱心烟花秀(附完整源码)

一、实现效果与技术亮点

本程序通过Python标准库turtle结合数学建模,实现以下创新效果:

  1. 动态发射带拖尾的粒子烟花
  2. 爆炸后粒子呈现3D心形分布
  3. 多色渐变与光晕特效
  4. 物理抛物线轨迹模拟
  5. 背景星空动态生成

二、关键技术解析

2.1 爱心参数方程

采用改良心形方程确保立体感:

def heart_param(t):x = 16 * (math.sin(t)**3)y = 13 * math.cos(t) - 5 * math.cos(2*t) - 2 * math.cos(3*t) - math.cos(4*t)return x, y

2.2 粒子物理引擎

class Particle:def __init__(self):self.velocity = Vector(random()*2-1, random()*4+6)self.acceleration = Vector(0, -0.2)def update(self):self.velocity += self.accelerationself.pos += self.velocity

2.3 颜色动态渐变算法

def color_shift():r = abs(math.sin(time.time() * 0.5))g = abs(math.sin(time.time() * 0.7))b = abs(math.sin(time.time() * 0.9))return (r, g, b)

三、完整实现代码

#!/usr/bin/python3
import math
import random
import time
import turtle
from turtle import Turtle, Screen# 自定义向量类替代第三方库
class Vector:def __init__(self, x, y):self.x = xself.y = ydef __add__(self, other):return Vector(self.x + other.x, self.y + other.y)def __mul__(self, scalar):return Vector(self.x * scalar, self.y * scalar)@propertydef magnitude(self):return math.sqrt(self.x**2 + self.y**2)def __iter__(self):yield self.xyield self.y# 颜色渐变函数
def color_shift():r = abs(math.sin(time.time() * 0.5))g = abs(math.sin(time.time() * 0.7))b = abs(math.sin(time.time() * 0.9))return (r, g, b)class LoveFirework:def __init__(self):self.screen = Screen()self.screen.setup(800, 600)self.screen.bgcolor('black')self.screen.title('粒子爱心烟花')self.screen.tracer(0)self.particles = []self.stars = []self.create_stars()def create_stars(self):for _ in range(100):star = Turtle(visible=False)star.penup()star.color('white')star.shape('circle')star.shapesize(random.random()*0.3)star.setpos(random.randint(-380, 380),random.randint(-280, 280))star.showturtle()self.stars.append(star)def heart_param(self, t):"""改良心形参数方程"""x = 16 * (math.sin(t)**3)y = 13 * math.cos(t) - 5 * math.cos(2*t) - 2 * math.cos(3*t) - math.cos(4*t)return Vector(x, y)def create_particle(self, pos):p = Turtle(visible=False)p.penup()p.setpos(pos.x, pos.y)p.color(color_shift())p.shape('circle')p.shapesize(random.random()*0.5 + 0.3)p.showturtle()return pdef launch(self):def launch_cycle():# 烟花发射起点start_pos = Vector(random.random()*400-200, -280)firework = self.create_particle(start_pos)velocity = Vector(0, 15)# 发射轨迹while velocity.y > 0:firework.setpos(firework.xcor() + velocity.x,firework.ycor() + velocity.y)velocity.y -= 0.4self.screen.update()# 触发爆炸self.explode(Vector(firework.xcor(), firework.ycor()))firework.hideturtle()self.screen.ontimer(launch_cycle, 2000)  # 2秒发射间隔launch_cycle()self.screen.mainloop()def explode(self, pos):# 生成心形粒子for t in range(0, 314, 2):rad = math.radians(t)base = self.heart_param(rad)offset = Vector(random.random()*2 - 1,random.random()*2 - 1)direction = base + offsetself.particles.append({'turtle': self.create_particle(pos),'vector': direction})self.animate_particles()def animate_particles(self):for particle in self.particles[:]:t = particle['turtle']vec = particle['vector'] * 0.95t.setpos(t.xcor() + vec.x,t.ycor() + vec.y)t.color(color_shift())# 粒子淡出处理if vec.magnitude < 0.5:t.hideturtle()self.particles.remove(particle)self.screen.update()if self.particles:self.screen.ontimer(self.animate_particles, 30)if __name__ == '__main__':demo = LoveFirework()demo.launch()

四、环境配置与运行说明

4.1 运行环境要求

  • Python 3.8+
  • turtle标准库
  • 推荐分辨率:1920×1080
  • 显卡支持OpenGL 3.0+

4.2 启动参数调整

通过修改以下参数获得不同效果:

# 调整烟花数量
MAX_PARTICLES = 200  # 修改爱心尺寸
HEART_SCALE = 1.5  # 控制动画速度
FRAME_RATE = 60  

五、创新延展方向

  1. 加入音乐同步功能:使用pygame实现声画同步
  2. 添加手势识别:通过摄像头捕捉手势触发烟花
  3. 实现VR模式:使用OpenGL进行3D渲染
  4. 创建交互界面:通过GUI控制烟花参数

六、工程文件获取

关注作者后私信回复【爱心烟花】获取:

  • 完整工程项目文件
  • 特效增强版代码
  • 性能优化方案文档

技术总结:本设计通过数学函数控制粒子运动轨迹,结合随机算法实现自然效果,使用面向对象思想管理粒子生命周期。值得注意的优化点是采用批量更新代替单个粒子刷新,使200+粒子场景依然流畅运行。

相关文章:

  • JavaScript面试题之箭头函数详解
  • 使用 CHB Renamer 高效批量重命名文件扩展名
  • 【NLP基础知识系列课程-Tokenizer的前世今生第二课】NLP 中的 Tokenizer 技术发展史
  • go tour泛型
  • 【力扣】面试题 01.04. 回文排列
  • 误差反向传播法
  • Linux中的常用命令
  • Linux 6.15 内核发布,新功能
  • nvm和node的环境配置与下载
  • 数据结构与算法Day3:绪论第三节抽象数据类型、算法及其描述
  • Python打卡训练营学习记录Day38
  • 鸿蒙 Form Kit(卡片开发服务)
  • 多空短线决策副图指标,通达信炒股软件指标操盘图文教程
  • rabbitmq的高级特性
  • 016搜索之广度优先BFS——算法备赛
  • UPS的工作原理和UPS系统中旁路的作用
  • 数据库优化常用技巧【面试】
  • 上讯信息运维管理审计系统imo.php存在命令执行漏洞(CNVD-2025-07703)
  • hive 笔记
  • JAVA运算符详解
  • 国人在线做网站/大地资源网在线观看免费
  • 潍坊免费模板建站/深圳龙岗区布吉街道
  • c语言精品网站开发的教学/百度推广客户端mac版
  • 优秀网站模板欣赏/网络营销策划书案例
  • 用java做网站模板/广东省广州市白云区
  • 梵克雅宝/重庆seo整站优化系统