使用第三方库pgzero
绘制跳动的爱心
在 Python 中,要实现一个会动的爱心,可以使用pgzrun
库来实现,使用前请确保其已经正确安装,如果未安装,可以通过以下命令进行安装:
pip install pgzero
以下是一个示例代码:
import pgzrun
from math import pi, sin, cos
import random
# 粒子类,图像上每一个小点都是一个粒子对象
class Particle():
def __init__(self, pos, size, f):
self.pos = pos
self.pos0 = pos
self.size = size
# 粒子的随机位移比例
self.f = f
def draw(self):
global L
# 用矩形绘制粒子
screen.draw.filled_rect(Rect((L * self.f * self.pos[0] + 400, -L * self.f * self.pos[1] + 300), self.size),
'hot pink')
def update(self, t):
# 爱心跳动的频率、幅度
df = 1 + (4 - 3 * self.f) * sin(t * 3) / 12
self.pos = self.pos0[0] * df, self.pos0[1] * df
data = [105, 102, 98, 115, 117, 33, 112, 103, 33, 106, 108, 118, 111, 33, 46, 33, 68, 115, 112, 116, 116, 106, 111, 30341,
32535, 31244, 25946, 23461]
no_p = 20000
dt = 2 * pi / no_p
particles = []
t = 0
c = 0
# 采用极坐标下的爱心曲线,计算出爱心图案上的基准点,创建粒子对象
# 每个点会有一个延轴向的随机位移,随机采用正态分布
while t < 2 * pi:
c += 1
sigma = 0.15 if c % 5 else 0.3
f = 1 - abs(random.gauss(1, sigma) - 1)
x = 16 * sin(t) ** 3
y = 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t)
size = (random.uniform(0.5, 2.5), random.uniform(0.5, 2.5))
particles.append(Particle((x, y), size, f))
t += dt
def draw():
screen.clear()
# 绘制爱心粒子
for p in particles:
p.draw()
TITLE = ''.join([chr(i - 1) for i in data])
status = 0
L = 100
elapsed = 0
def update(dt):
global elapsed, L, status
elapsed += dt
if status == 0:
# 为了初始的集聚效果,加了一个很大的倍数 L,并不断缩小至正常值
L -= dt * 200
if L <= 10:
status = 1
L = 10
elif status == 2:
L += dt * 200
# 根据时间更新粒子位置
for p in particles:
p.update(elapsed)
TITLE = '会动的爱心'
pgzrun.go()
上述代码使用pgzrun
库绘制了一个会动的心形,其中用粒子来组成心形。你可以在代码中调整爱心跳动的频率、幅度。