2014-03-26 124 views
0

使用matplotlib,我試圖使用帶有多邊形的動畫函數在平面中旋轉它。Matplotlib動畫多邊形

下面粘貼的代碼只繪製第一個多邊形,但動畫不起作用。

有人可以發現animate函數有什麼問題嗎?

import numpy as np 
from matplotlib import pyplot as plt 
from matplotlib import animation 
from matplotlib.patches import Polygon 
fig = plt.figure() 
fig.set_dpi(100) 
fig.set_size_inches(7, 6.5) 

ax = plt.axes(xlim=(-30, 30), ylim=(-30, 30)) 


pts = [[0.,0.], [2.,0.], [9.6,7.6], [9.6,9.6]] 


patch = plt.Polygon(pts,closed=None, fill=None, edgecolor='r') 
def init(): 
    patch.pts = [[0.,0.], [2.,0.], [9.6,7.6], [9.6,9.6]] 
    ax.add_patch(patch) 
    return patch, 

def animate(i): 

    x1=0.+ 10. * np.sin(np.radians(i)) 
    x2=2.+ 10. * np.sin(np.radians(i)) 
    x3=9.6+ 10. * np.sin(np.radians(i)) 
    x4=9.6+ 10. * np.sin(np.radians(i)) 

    y1=0.+ 10. * np.cos(np.radians(i)) 
    y2=0.+ 10. * np.cos(np.radians(i)) 
    y3=7.6+ 10. * np.cos(np.radians(i)) 
    y4=9.6+ 10. * np.cos(np.radians(i)) 


    patch.pts = [[x1,y1], [x2,y2], [x3,y3], [x4,y4]] 


    return patch, 


anim = animation.FuncAnimation(fig,animate,init_func=init,frames=36,interval=1000,blit=True) 


plt.show() 

回答

1

行:

patch.pts = [[x1,y1], [x2,y2], [x3,y3], [x4,y4]] 

不更新多邊形的頂點。您可以使用set_xy更改頂點:

patch.set_xy([[x1,y1], [x2,y2], [x3,y3], [x4,y4]]) 

這將使每個迭代的繪圖發生變化。 Matplotlib artists documentation有更多信息。

它仍然看起來不像形狀在旋轉。這與你使用的座標有關。