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

基于Python实现一个浪漫烟花秀

为了实现一个类似烟花秀的效果,我们可以通过复杂的粒子系统来模拟烟花的升起、绽放和下落效果。以下是一个示例,旨在创建更为动态和逼真的烟花秀效果。

示例代码

这个代码示例将使用 matplotlibnumpy,并实现更丰富的视觉效果:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

class Particle:
    def __init__(self, x, y, vx, vy, color):
        self.x = x
        self.y = y
        self.vx = vx
        self.vy = vy
        self.color = color
        self.life = np.random.randint(50, 100)  # 生命值,控制粒子的存活时间

    def update(self):
        self.x += self.vx
        self.y += self.vy
        self.vy -= 0.05  # 重力影响
        self.life -= 1  # 每次更新生命值减少

    def is_alive(self):
        return self.life > 0

class Firework:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.particles = []
        self.exploded = False

    def explode(self):
        if not self.exploded:
            num_particles = np.random.randint(100, 200)
            angles = np.linspace(0, 2 * np.pi, num_particles)
            speeds = np.random.uniform(1, 4, num_particles)
            colors = plt.cm.hsv(np.random.rand(num_particles))  # 使用HSV颜色

            for angle, speed, color in zip(angles, speeds, colors):
                vx = speed * np.cos(angle)
                vy = speed * np.sin(angle)
                self.particles.append(Particle(self.x, self.y, vx, vy, color))
            self.exploded = True

    def update(self):
        if self.exploded:
            for particle in self.particles:
                particle.update()

    def get_particles(self):
        return [p for p in self.particles if p.is_alive()]

# 初始化画布
fig, ax = plt.subplots()
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ax.set_facecolor('black')

fireworks = []

# 生成烟花
def generate_fireworks(num):
    for _ in range(num):
        x = np.random.uniform(1, 9)
        y = 0  # 从底部开始
        firework = Firework(x, y)
        fireworks.append(firework)

generate_fireworks(3)

# 动画更新函数
def update(frame):
    ax.clear()
    ax.set_xlim(0, 10)
    ax.set_ylim(0, 10)
    ax.set_facecolor('black')

    # 处理烟花升起
    for firework in fireworks:
        if firework.y < 8:  # 设置升起的高度
            firework.y += 0.1
        else:
            firework.explode()  # 当升至最高点,爆炸
            firework.update()  # 更新粒子

        # 绘制存活的粒子
        particles = firework.get_particles()
        for particle in particles:
            ax.scatter(particle.x, particle.y, color=particle.color, s=10)

# 创建动画
ani = animation.FuncAnimation(fig, update, frames=100, interval=50)
plt.show()

代码说明

  1. 粒子类

    • 每个粒子有随机的生命值、速度和颜色。
    • 更新方法考虑了重力的影响,使粒子逐渐下落。
  2. 烟花类

    • 生成大量粒子,每个粒子都有独特的颜色和速度,使效果更加多样化。
    • 当烟花达到一定高度后,会进行爆炸。
  3. 初始化和动画更新

    • 动画中,每个烟花从底部升起,并在达到最高点时爆炸,粒子下落,呈现出烟花绽放的效果。

运行代码

将以上代码复制到你的 Python 环境中运行,即可看到一个更为动态和逼真的烟花效果。你可以根据需要进一步调整粒子的数量、速度和颜色映射,以实现更符合您预期的效果。


http://www.kler.cn/news/313070.html

相关文章:

  • 如何设置 Django 错误邮件通知 ?
  • I2C中继器TCA9517A(TI)
  • 新160个crackme - 060-snake
  • 2024年Q3国际信息系统安全认证联盟(ISC2)内部研讨会要点分享
  • 系统架构设计师 大数据架构篇二
  • 球形包围框-Bounding Sphere-原理-代码实现
  • Mycat中间件
  • 牛客BC92,逆序输出
  • 222222222
  • Qt/C++开发经验
  • 【深度学习 transformer】理解 Transformer:机器学习界的“变形金刚
  • Vue3:v-model实现组件通信
  • Streamlit:使用 Python 快速开发 Web 应用
  • 大数据新视界 --大数据大厂之AI 与大数据的融合:开创智能未来的新篇章
  • Git入门学习(1)
  • HTTP中的Cookie与Session
  • pandoc自定义过滤器
  • 小程序构建npm失败
  • WPF 所有的控件和每个控件的主要作用和应用场景
  • 25届计算机专业毕设选题推荐-基于python+Django协调过滤的新闻推荐系统
  • 数学辅导微信小程序--论文ppt源码调试讲解
  • 执行网络攻击模拟的 7 个步骤
  • 注册建造师执业工程规模标准(公路工程铁路工程通信与广电工程民航机场工程港口与航道工程)
  • (c语言+数据结构链表)项目:贪吃蛇
  • 使用LangGPT提示词让大模型比较浮点数
  • 一天认识一个硬件之连接线
  • word-break和word-wrap
  • 实战Redis与MySQL双写一致性的缓存模式
  • 【4.4】图搜索算法-BFS和DFS两种方式解岛屿数量
  • WPF DataGrid 赋值与修改