2017-12-19 15 views
0

私はCのプログラムをPythonに '翻訳'しています。それは、y軸上の粒子の減衰された単純調和運動である。アニメーションはmatplotlibのFuncAnimationを使用します。パーティクルのパスが正確に表現されるように、各ステップ(フレーム)に小さなステップサイズ(dh)を使用します。 小さなdhの問題は、単位距離あたりのフレーム数を増加させます。小さなdhのアニメーションが速くなる(高いfps)ように、1秒あたりのフレーム数を増やす方法はありますか?ところでFuncAnimationは長いアニメーションのFPSを向上させますか?

は、プログラムは、複数の粒子を用いたような、将来の改善のための2Dアレイを使用します。しかし、私はまだすべてのパーティクルをアニメーション化するメソッドを組み込む必要がありますが、これは問題ではありません。アニメーションのinterval

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import animation 

#The bungee rope has to have a [k = 0.15] in order to do 5 oscillations 
N = 1 
dt = 0.1 #//size step 
time = 8000 
count =1; 
b = 1; 
k = 0.2; 
m= 100; 

# function to open an x-window 
fig = plt.figure() 

#define positions and velocities for each 
x = np.zeros((N,time)) 
y = np.zeros((N,time)) 
vx = np.zeros((N,time)) 
vy = np.zeros((N,time)) 

#define variables for the plotting canvas 
xmin = -5.0; xmax =5.0; 
ymin = -80.0; ymax = 80.0; 

ax = plt.axes(xlim= (xmin,xmax), ylim=(ymin,ymax),ylabel = 'Y Position') 
(my_point,) = ax.plot([],[],'ro',ms=7) #stored var to make red circle (ro) point 


#set initial position and velocity 
x[:N,0] = 0; y[:N,0] = 75; 
vx[:N,0] = 0; vy[:N,0] = 0.0; 

for i in range(time-1): 
    #set path/function 
    for j in range(N): 
     a = (-k*y[j,i] - b*vy[j,i])/(m); #damped simple harmonic motion 
     vy[j,i+1] = vy[j,i] + a*dt #differential changes to velocity 
     y[j,i+1] = y[j,i] + dt*vy[j,i+1] #differential changes to distance 

def get_step(n,x,y,point): 
    point.set_data(x[n],y[n]) 

mymovie = animation.FuncAnimation(fig,get_step,frames= time,\ 
            fargs=(x[0,:],y[0,:],my_point), interval = 0) 

plt.show() 
print("For 5 oscillations k = %f\n" % k) 

答えて

0

はすでに理論的には秒あたりのフレーム数が無限を意味し、0に設定されています。実際には、アニメーションはコンピュータが許す限り速く描画されます。

アニメーションの制限要因は、キャンバス内の各フレームのすべてのために再描画されることです。これは、アニメーション中に軸、目盛り、ラベルなどがすべて同じままであるため、オーバーヘッドが大きくなります。この制限を克服するための標準的な技術が、ブリットれます。これは、各フレームでアニメーション作家(赤いボール)を再描画します。

これで十分でない場合は、アニメーションのステップをスキップすることを検討してください。のみすべての第2工程を示す

frames = time[::2] 
関連する問題