(图书介绍:童晶:《Python趣味创意编程》新书预告)
本章我们将实现随风飘动的粒子,如图所示。首先绘制逐渐消失的轨迹,实现随机运动的圆点;然后学习列表的概念,利用列表实现多个运动粒子;最后实现随机速度场,并为粒子添加彩色效果。
8 随风飘动的粒子
视频教程:
一些图片效果:
最终代码:
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的圆点
这一章主要讲解了列表的语法知识,实现了随风飘动的粒子。应用列表,我们可以记录、处理大量的数据;应用随机和颜色,能够带来更加丰富多变的效果。读者也可以尝试实现更加有趣的交互、可视化效果。
更多推荐
第8章 随风飘动的粒子 (《Python趣味创意编程》教学视频)
发布评论