簡體   English   中英

使用matplotlib繪制運動多邊形

[英]Draw moving polygons with matplotlib

我有許多多邊形,其頂點在模擬的每個步驟中都會移動,在計算出所有新的多邊形形式之后,必須將其繪制到matplotlib圖上。

當代碼是靜態的時,我使用路徑和補丁來繪制多邊形,例如

for polygon in P:
    path = Path(polygon)
    patch = patches.PathPatch(path, facecolor='none', lw=1)
    ax.add_patch(patch)

但是,當然,在更新多邊形時執行此操作會導致繪制最后一個多邊形,這不是一個干凈的更新。 多邊形的格式是具有numpy數組的列表,每個都是多邊形的頂點,例如[[0.1223, 0.234], [0.123,0.4323], [0.2133, 0.5433]]

我可以繪制不帶線的頂點作為points = ax.plot(vertices[:,0], vertices[:,1], '.')[0]並使用points.set_data(...)更新它們,然后繪制畫布。 我沒有使用FuncAnimation,因為我看到的示例由於FuncAnimation本身而更新了數據。 在我的情況下,數據是通過迭代生成的,在每次迭代結束時,必須繪制多邊形的變化。

請嘗試下面的示例。 它將繪制一個繞圈移動的框。 它應該很容易適應您的應用程序。

import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches

import numpy as np
import math
import time

verts = np.array([[0.,0.],[0.,1.],[1.,1.],[1.,0.],[0.,0.]])

codes = [Path.MOVETO,
         Path.LINETO,
         Path.LINETO,
         Path.LINETO,
         Path.CLOSEPOLY,
         ]

path = Path(verts, codes)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim(-2,2)
ax.set_ylim(-2,2)
plt.show(block=False)
i=0.0
while i<100:
#for i in range(100):
    ax.clear()
    x=math.sin(i)
    y=math.cos(i)

    print x, y

    verts2=np.copy(verts)
    for j in range(len(verts)):
        verts2[j]=verts[j]+np.array([x,y])
    path = Path(verts2, codes)
    patch = patches.PathPatch(path, facecolor='orange', lw=2)
    ax.add_patch(patch)
    plt.draw()
    i+=0.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM