python趣味编程_第8章 随风飘动的粒子 (《Python趣味创意编程》教学视频)

(图书介绍:童晶:《Python趣味创意编程》新书预告)

本章我们将实现随风飘动的粒子,如图所示。首先绘制逐渐消失的轨迹,实现随机运动的圆点;然后学习列表的概念,利用列表实现多个运动粒子;最后实现随机速度场,并为粒子添加彩色效果。

知乎视频​www.zhihu.com

视频教程:

知乎视频​www.zhihu.com

一些图片效果:

3d4ad26582a3cc3dfaedb2033cc27581.png

5466f9f27072033e937bfe3c5ae8022f.png

52d1a84181fe18671f84668dc3f038bd.png

最终代码:

particles = [] # 存储所有粒子的全局变量,初始为空列表

def setup(): 
  size(1280, 800) # 设定画布大小
  noStroke()  # 不绘制线条
  for i in range(2000): # 生成2000个粒子
    x = random(0,width)  # 设置圆心x坐标
    y = random(0,height) # 设置圆心y坐标
    v_mag = random(1.0,2.0)  # 速度绝对值大小
    v_angle = random(-2*PI,2*PI) # 速度的方向
    c = color(random(100,255),random(100,255),random(100,255))
    particle = [x,y,v_mag,v_angle,c] # 当前粒子
    particles.append(particle) # 把粒子添加到particles中

def draw(): 
  fill(0, 10) # 设置填充色为黑色,透明度为10
  rect(0, 0, width, height) # 绘制一个半透明的大矩形
  fill(255) # 设置填充色为白色,用于下面绘制粒子
  for particle in particles:    
    noiseValue = noise(0.001*particle[0],10+0.001*particle[1] 
                       ,frameCount*0.005)
    particle[3] = map(noiseValue,0,1,-2*PI,PI*2) #速度方向随机扰动
    vx = particle[2]*cos(particle[3]) # x方向速度
    vy = particle[2]*sin(particle[3]) # y方向速度
    particle[0] = particle[0] + vx # x坐标变化
    particle[1] = particle[1] + vy # y坐标变化
    # 粒子碰到边界后随机出现
    if particle[0]<0 or particle[0]>width 
        or particle[1]<0 or particle[1]>height: 
      particle[0] = random(0,width)  # 设置圆心x坐标
      particle[1] = random(0,height) # 设置圆心y坐标
      r = map(sin(frameCount/75.0),-1,1,50,255) # 随机红色分量
      g = map(sin(frameCount/101.0),-1,1,75,255)  # 随机绿色分量
      b = map(sin(frameCount/151.0),-1,1,100,255) # 随机蓝色分量
      particle[4] = color(r,g,b) # 设置随机颜色
    
    fill(particle[4])  # 设置填充颜色  
    circle(particle[0], particle[1], 2) # 画一个直径为2的圆点

这一章主要讲解了列表的语法知识,实现了随风飘动的粒子。应用列表,我们可以记录、处理大量的数据;应用随机和颜色,能够带来更加丰富多变的效果。读者也可以尝试实现更加有趣的交互、可视化效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值