第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() # 顯示粒子

這一章主要要學習了面向對象編程,包括類和對象、成員變量、成員函數、構造函數等概念,利用這些知識實現了粒子同心圓的效果。讀者也可以嘗試應用面向對象的知識,改進之前章節的案例,使得代碼的可讀性更好、也更容易實現和擴展。

面向對象編程博大精深,本書通過一個簡單案例讓讀者體會到面向對象編程的好處,想要繼續深入的讀者可以進一步查閱其他學習資料。

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