python 爱心跳动3D粒子效果
时间: 2025-01-08 17:11:46 浏览: 10
### 实现带心率跳动感的3D粒子特效
为了创建一个具有心跳感的3D粒子系统,可以基于Pygame和Matplotlib库来构建。此项目不仅涉及二维平面上的心形路径绘制,还需要扩展到三维空间,并加入随时间变化而脉动的效果。
#### 1. 安装依赖包
首先安装所需的Python库:
```bash
pip install pygame matplotlib numpy
```
#### 2. 创建基础框架
定义主程序结构,在这里引入必要的模块并设置窗口参数:
```python
import sys
import math
from random import randint, uniform
import pygame
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
pygame.init()
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
clock = pygame.time.Clock()
def heart_3d(t):
"""计算给定角度下的3D心型坐标"""
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))
z = t % (2*math.pi) / (2*math.pi)*10 # 添加Z轴维度使图形立体化
return [x,y,z]
particles = []
for i in range(100):
particles.append({
'pos':heart_3d(uniform(-math.pi, math.pi)),
'vel':[uniform(-0.5, 0.5), uniform(-0.5, 0.5)],
'life':randint(50, 200),
'color':(randint(128, 255), randint(128, 255), randint(128, 255))
})
```
#### 3. 更新逻辑与渲染循环
编写更新函数用于处理每一帧的数据刷新工作;同时通过`draw()`方法完成画面呈现:
```python
running = True
while running:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 清屏操作
screen.fill((0, 0, 0))
new_particles = []
for particle in particles[:]:
pos = particle['pos']
# 让粒子沿z方向上下浮动形成“跳动”的视觉效果
offset_z = abs(math.sin(pygame.time.get_ticks()/500)) * 2
# 绘制单个粒子
pygame.draw.circle(screen,
particle['color'],
((pos[0]+offset_z+17)*20 + screen_width/2,
(-pos[1]-offset_z+14)*20 + screen_height/2),
2)
# 减少生命值直到消失
particle['life'] -= 1
if particle['life'] > 0:
new_particles.append(particle)
# 补充新的随机位置的粒子保持总数不变
while len(new_particles)<len(particles):
angle = uniform(-math.pi, math.pi)
color=(randint(128, 255), randint(128, 255), randint(128, 255))
life=randint(50, 200)
position=heart_3d(angle)
velocity=[uniform(-0.5, 0.5), uniform(-0.5, 0.5)]
new_particles.append({'pos':position,'vel':velocity,'life':life,'color':color})
particles=new_particles.copy()
pygame.display.flip()
pygame.quit()
sys.exit()
```
上述代码实现了带有心跳节奏波动特性的3D心形粒子系统[^1]。在这个例子中,利用了正弦波的形式让所有粒子沿着Z轴周期性地上升下降,从而营造出一种心脏搏动的感觉。
阅读全文