Computer >> Máy Tính >  >> Lập trình >> Python

Tạo phim từ Python mà không lưu từng khung hình riêng lẻ vào tệp

Sử dụng phương thức FuncAnimation, chúng ta có thể tạo một bộ phim. Chúng tôi sẽ tạo một phương thức do người dùng xác định, cập nhật, để tiếp tục thay đổi vị trí của các hạt và cuối cùng, phương thức sẽ trả về thể hiện phân tán.

Các bước

  • Nhận vị trí, vận tốc, lực và kích thước ban đầu của các hạt.

  • Tạo một hình mới hoặc kích hoạt một hình hiện có với figsize =(7, 7).

  • Thêm một trục vào hình hiện tại và biến nó thành các trục hiện tại, với xlim và ylim.

  • Vẽ đồ thị phân tán cho vị trí ban đầu của các hạt.

  • Tạo hoạt ảnh bằng cách gọi liên tục một hàm * func *. Chúng ta có thể chuyển một phương thức do người dùng xác định để giúp thay đổi vị trí của các phần tử, vào lớp FuncAnimation.

  • Hiển thị hình bằng cách sử dụng plt.show ().

Ví dụ

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()

Đầu ra

Tạo phim từ Python mà không lưu từng khung hình riêng lẻ vào tệp