Matplotlib 基于凹多边形的边界填充凹多边形内部

Matplotlib 基于凹多边形的边界填充凹多边形内部,matplotlib,drawing,polygon,Matplotlib,Drawing,Polygon,问题是使用pylab、numpy和matplot绘制一个内部着色的8点星 我已经设置了顶点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(a

问题是使用pylab、numpy和matplot绘制一个内部着色的8点星

我已经设置了顶点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]))

通过简单的面积、积分等数学概念,问题得以解决(:

循环可以很容易地用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()