#達成したいこと
関数上を点が動くアニメーションを作成したいです.
その際,点の動くスピードを一定にする方法を模索しています.
##現状
python
import numpy as np import matplotlib.pyplot as plt from matplotlib import animation plt.rcParams['figure.figsize'] = (6,5) plt.rcParams['font.family'] = 'Times New Roman' plt.rcParams['font.size'] = 16 def axes_set_linewidth(axes, t=2, b=2, r=1, l=1): axes.spines['top'].set_linewidth(t) axes.spines['bottom'].set_linewidth(b) axes.spines['right'].set_linewidth(r) axes.spines['left'].set_linewidth(l) #変数設定,Nは(x軸の距離) N = 0.1 x = np.arange(-2 * np.pi,2 * np.pi, N) y = np.sin(x) x1 = np.arange(-2 * np.pi,2 * np.pi,N) y1 = np.cos(x1)*2 x2 = np.arange(-2 * np.pi,2 * np.pi,N) y2 = np.cos(x1)*0.5 fig, ax = plt.subplots() ax.plot(x, y, color = 'blue', label = 'sin x') #sinカーブをplot ax.plot(x1, y1, color = 'red', label = 'cos x*2') #cosカーブをplot ax.plot(x2, y2, color = 'green', label = 'cos x*0.5') axes_set_linewidth(ax, t=0, r=0, b=2, l=2) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_ylim(-1.2, 1.4) ax.legend(frameon = False) plt.subplots_adjust(top=0.9, bottom=0.2, right=0.9, left=0.2) ims = [] for i in range(len(x1)): p = ax.plot(x[i], y[i], color = 'darkblue', marker = 'o', markersize = 10) q= ax.plot(x1[i], y1[i], color = 'darkblue', marker = 'o', markersize = 10) r= ax.plot(x2[i], y2[i], color = 'darkblue', marker = 'o', markersize = 10) ims.append(p+q+r) ani = animation.ArtistAnimation(fig, ims, interval=100) ani.save('sincos2.gif', writer='imagemagick', dpi = 300)
#問題点
上記の場合,x軸でプロットの間隔を定めているため,アニメーション時の点の動く速さがバラバラになってしまいます.
一定の速度で関数上を点が動く方法をご教示いただけますと幸いです.
(上記の場合,振幅が大きい2cosx上の点が最も遅く右端に到達するようにしたいです.)
まだ回答がついていません
会員登録して回答してみよう