2014-02-27 64 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()