2014-02-27 89 views
1

問題是繪製一個8點明星與它的內部着色,使用pylab,numpy & matplot。基於其邊界填充凹多邊形

我已經設置了頂點xy座標,這給明星的邊界:

a=linspace(0,2*pi,2*n-1) 
x=[] 
y=[] 
per=0 

ang=list(a) 

for i in range(2*n-1): 
    if i%2==0: 
     x.append(cos(ang[i])) 
     y.append(sin(ang[i])) 
    else: 
     x.append(0.5*cos(ang[i])) 
     y.append(0.5*sin(ang[i])) 
plot (x,y) 

現在我需要填補它,但我沒有設法找到了解決的辦法。

編輯:

我插入這一行:

u=linspace(0,1) 
for k in u: 
    for i in range(2*n-1): 
     if i%2==0: 
      x.append(k*cos(ang[i])) 
      y.append(k*sin(ang[i])) 
     else: 
      x.append(0.5*k*cos(ang[i])) 
      y.append(0.5*k*sin(ang[i])) 

並通過面積,積分簡單的數學概念,等問題解決了(:

回答

1

循環可以很容易地在numpy的矢量和填充的多邊形可以通過matplotlib fill命令來繪製。下面是例子:

import numpy as np 
import matplotlib.pyplot as plt 

n = 8 
# angles of outer points 
phi = np.linspace(0, 2*np.pi, tips+1) 
# generate outer and inner (shifted) coordinates 
x = np.array([np.sin(phi), 
       0.5 * np.sin(phi + phi[1]/2)]).flatten(order='F') 
y = np.array([np.cos(phi), 
       0.5 * np.cos(phi + phi[1]/2)]).flatten(order='F') 
# plot filled 
plt.fill(x,y) 
plt.show()