(图书介绍:童晶:《Python趣味创意编程》新书预告)
本章我们将实现粒子同心圆,如图所示。首先学习面向对象编程的知识,为粒子类添加成员变量与成员函数;然后实现一个面向对象版本的运动粒子,最终实现粒子移向同心圆的互动效果。
知乎视频 www.zhihu.com视频教程:
知乎视频 www.zhihu.com最终代码:
class Particle: # 定义粒子类
def __init__(self): # 构造函数
self.x = random(1,width) # x座标
self.y = random(1,height) # y座标
self.vx = random(-3,3) # x方向速度
self.vy = random(-3,3) # y方向速度
# 随机颜色
self.c=color(random(0,150),random(150,255),random(150,255))
self.w = random(1,2) # 线条粗细
def display(self): # 显示成员函数
strokeWeight(self.w) # 设置线条粗细
stroke(self.c) # 设置线条颜色
point(self.x, self.y) # 在对应座标画一个点
def update(self): # 更新成员函数
dx = mouseX - self.x # 求出当前粒子到鼠标的差
dy = mouseY - self.y
d = dist(self.x,self.y,mouseX,mouseY) # 粒子到鼠标距离
if d < 1: # 防止距离过小,除以0
d = 1
f = cos(d * 0.04)*random(-20,20) # 计算粒子受力
ax = f*dx/d # 用受力产生加速度
ay = f*dy/d
self.vx = 0.5*self.vx + ax # 用加速度更新速度
self.vy = 0.5*self.vy + ay
self.x += self.vx # 用速度更新粒子位置
self.y += self.vy
points = [] # 列表,存储所有粒子
def setup():
size(1000, 600) # 设定画布大小
for i in range(5000): # 随机产生5000个粒子
pt = Particle() # 定义粒子对象
points.append(pt) # 把pt添加到列表中
def draw():
fill(30, 20) # 背景颜色,透明度
rect(0,0,width,height) # 画大矩形,产生粒子运动尾迹效果
for pt in points: # 对所有粒子遍历
pt.update() # 更新粒子
pt.display() # 显示粒子
这一章主要要学习了面向对象编程,包括类和对象、成员变量、成员函数、构造函数等概念,利用这些知识实现了粒子同心圆的效果。读者也可以尝试应用面向对象的知识,改进之前章节的案例,使得代码的可读性更好、也更容易实现和扩展。
面向对象编程博大精深,本书通过一个简单案例让读者体会到面向对象编程的好处,想要继续深入的读者可以进一步查阅其他学习资料。