如何根据多边形的方向创建网格

时间:2018-12-08 08:46:26

标签: python-3.x numpy matplotlib

如何根据具有一定间隔的多边形的方向来创建网格,其中多边形始终具有4个方向不同的点数据,例如我的多边形看起来像这样:

x1 = np.array([50,0,150,200,50])
y1 = np.array([10,-50,-60,0,10])

并且我想像这样制作网格:

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以对每个坐标使用插值函数:

from scipy.interpolate import interp2d

x = np.array([0, 1], dtype=np.float)
y = np.array([0, 1], dtype=np.float)

现在,我们需要创建插值函数,以便在小单位正方形(0,1)x(0,1)上,获得所需的结果。

zx = np.array([[0, 150],[50, 200]])
fx = interp2d(x, y, zx)

fx(0.5, 0.5)

zy执行相同操作,以获取多边形内部的y坐标。

答案 1 :(得分:0)

您可以通过将多边形边缘细分为等距的部分来创建LineCollection的“网格线”,如下所示。在函数grid中,nxny是按多边形的每个维度要创建的线数。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.collections import LineCollection

def grid(x,y, nx, ny, **kwargs):
    def verts(a,b,c,d,n):
        l1x = np.linspace(x[a],x[b], n)
        l1y = np.linspace(y[a],y[b], n)
        l2x = np.linspace(x[d],x[c], n)
        l2y = np.linspace(y[d],y[c], n)
        return np.stack((np.c_[l1x, l2x], np.c_[l1y, l2y]), axis=-1)
    v = np.concatenate((verts(0,1,2,3,ny), verts(1,2,3,4,nx)), axis=0)
    return LineCollection(v, **kwargs)

x1 = np.array([50,0,150,200,50])
y1 = np.array([10,-50,-60,0,10])


fig, ax = plt.subplots()

ax.add_collection(grid(x1,y1,5,6, color="gray"))

rect=Polygon(np.c_[x1,y1], edgecolor="C0", linewidth=2, facecolor="none", zorder=3)
ax.add_patch(rect)

ax.autoscale()
plt.show()

enter image description here