当前位置:   article > 正文

Python 绘制跳动的爱心_python爱心粒子

python爱心粒子

使用第三方库pgzero绘制跳动的爱心

在 Python 中,要实现一个会动的爱心,可以使用pgzrun库来实现,使用前请确保其已经正确安装,如果未安装,可以通过以下命令进行安装:

pip install pgzero
  • 1

以下是一个示例代码

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

上述代码使用pgzrun库绘制了一个会动的心形,其中用粒子来组成心形。你可以在代码中调整爱心跳动的频率、幅度。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/171672
推荐阅读
相关标签
  

闽ICP备14008679号