以下の内容はhttps://genkaiphd.hatenablog.com/entry/2024/09/24/113139より取得しました。


Pythonで点の軌跡のアニメーション

Toy実験ように適当な軌跡のアニメーションが欲しかったので作った.

各frameをつくる:

import numpy as np
import math
import itertools
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
PI = math.pi

# img_size is 2N x 2N
(N, N) = (30, 30)

def current_point(r, ang):
    x = r * math.cos( ang )
    y = r * math.sin( ang )
    return x, y

def get_bar(cr, cang, dr, dang):
    fill_range = []
    for r in np.arange(cr-dr, cr+dr, 0.02):
        for ang in np.arange(cang-dang, cang+dang, 0.02):
            (x,y) = current_point(r, ang)
            fill_range.append((x,y))
    return fill_range

def get_frames_for_circle(rad=0.65, lor=0.1):
    frames = []
    for (k,t) in enumerate(np.arange(-2*PI,2*PI,0.1)):
        img_np = np.ones((2*N+1,2*N+1))
        
        past_range = [
            get_bar(rad, t-0.0, 0.10, lor),
            get_bar(rad, t-0.1, 0.09, lor),
            get_bar(rad, t-0.2, 0.08, lor),
            get_bar(rad, t-0.3, 0.07, lor),
            get_bar(rad, t-0.4, 0.06, lor),
            get_bar(rad, t-0.5, 0.05, lor),
            get_bar(rad, t-0.6, 0.04, lor),
            get_bar(rad, t-0.7, 0.03, lor),
            get_bar(rad, t-0.8, 0.02, lor),
            get_bar(rad, t-0.9, 0.01, lor),
            get_bar(rad, t-1.0, 0.005, lor),
            get_bar(rad, t-1.1, 0.005, lor),
            get_bar(rad, t-1.2, 0.005, lor),
            get_bar(rad, t-1.3, 0.005, lor),
        ]
    
        kmax = len(past_range)
        for (k,fill_range) in enumerate(past_range):
            for (x, y) in fill_range:
                x_int = np.clip(round(N*x + N),0, 2*N)
                y_int = np.clip(round(N*y + N),0, 2*N)
                img_np[x_int,y_int] = 1/kmax*k
        frames.append(img_np)
    return frames

つくったフレームからgifアニメーションをつくる

frames = get_frames_for_circle(rad=0.75, lor=0.05)
% ↓画像としてほしかったらこれをコメントアウトして
% plt.imshow(frames[-1]) 

fig, ax = plt.subplots()
img = ax.imshow(frames[0], cmap='gray')
def update(frame):
    img.set_array(frame)
    return [img]
ani = FuncAnimation(fig, update, frames=frames, interval=50)
ani.save('animation.gif', writer='imagemagick')




以上の内容はhttps://genkaiphd.hatenablog.com/entry/2024/09/24/113139より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14