第12章 粒子同心圆(《Python趣味创意编程》教学视频) - 知乎

(图书介绍:童晶:《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() # 显示粒子

这一章主要要学习了面向对象编程,包括类和对象、成员变量、成员函数、构造函数等概念,利用这些知识实现了粒子同心圆的效果。读者也可以尝试应用面向对象的知识,改进之前章节的案例,使得代码的可读性更好、也更容易实现和扩展。

面向对象编程博大精深,本书通过一个简单案例让读者体会到面向对象编程的好处,想要继续深入的读者可以进一步查阅其他学习资料。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章