ด้วยวิธีการ FuncAnimation เราสามารถสร้างภาพยนตร์ได้ เราจะสร้างวิธีการที่ผู้ใช้กำหนดเอง อัปเดต เพื่อเปลี่ยนตำแหน่งของอนุภาคต่อไป และในตอนท้าย วิธีการจะคืนค่าอินสแตนซ์ที่กระจาย
ขั้นตอน
-
หาตำแหน่งเริ่มต้น ความเร็ว แรง และขนาดอนุภาค
-
สร้างตัวเลขใหม่หรือเปิดใช้งานตัวเลขที่มีอยู่ด้วย figsize =(7, 7)
-
เพิ่มแกนให้กับตัวเลขปัจจุบันและทำให้เป็นแกนปัจจุบันด้วย xlim และ ylim
-
พล็อตการกระจายสำหรับตำแหน่งเริ่มต้นของอนุภาค
-
สร้างแอนิเมชั่นโดยเรียกใช้ฟังก์ชัน *func* ซ้ำๆ เราสามารถส่งต่อวิธีการที่ผู้ใช้กำหนดซึ่งช่วยในการเปลี่ยนตำแหน่งของอนุภาคเป็นคลาส FuncAnimation
-
แสดงตัวเลขโดยใช้ plt.show()
ตัวอย่าง
import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation import numpy as np dt = 0.005 n = 20 L = 1 particles = np.zeros(n, dtype=[("position", float, 2), ("velocity", float, 2), ("force", float, 2), ("size", float, 1)]) particles["position"] = np.random.uniform(0, L, (n, 2)); particles["velocity"] = np.zeros((n, 2)); particles["size"] = 0.5 * np.ones(n); fig = plt.figure(figsize=(7, 7)) ax = plt.axes(xlim=(0, L), ylim=(0, L)) scatter = ax.scatter(particles["position"][:, 0], particles["position"][:, 1]) def update(frame_number): particles["force"] = np.random.uniform(-2, 2., (n, 2)); particles["velocity"] = particles["velocity"] + particles["force"] * dt particles["position"] = particles["position"] + particles["velocity"] * dt particles["position"] = particles["position"] % L scatter.set_offsets(particles["position"]) return scatter, anim = FuncAnimation(fig, update, interval=10) plt.show()
ผลลัพธ์