删除边界框点之间的网格点

时间:2018-07-25 16:07:37

标签: python-3.x numpy

我正在寻找一种删除块边界框内的网格网格点的有效方法(代码中的块1和2)。我的代码是:

x_max, x_min, y_max, y_min = 156.0, 141.0, 96.0, 80.0
offset = 5
stepSize = 0.2
x = np.arange(x_min-offset, x_max+offset, stepSize)
y = np.arange(y_min-offset, y_max+offset, stepSize)
xv, yv = np.meshgrid(x, y)
#bounding box (and pints inside) that I want to remove for mesh
block1 = [(139.78, 86.4), (142.6, 86.4), (142.6, 88.0), (139.78, 88.0)]
block2 = [(154.8, 87.2), (157.6, 87.2), (157.6, 88.8), (154.8, 88.8)]

根据答案之一,如果只有一个要从网格中删除的块,则可以生成所需的结果。如果我有多个块,那么它将不起作用。什么是从网格中删除多个块的优化方法。最终数字应如下所示: Mesh

编辑:改进的问题和已编辑的代码。

2 个答案:

答案 0 :(得分:0)

只需在块周围重新定义x和y即可:

block_xmin = np.min(block[:,0])
block_xmax = np.max(block[:,0])
block_ymin = np.min(block[:,1])
block_ymax = np.max(block[:,1])

X = np.hstack((np.arange(x_min-offset, block_xmin, stepSize), np.arange(block_xmax, x_max+offset, stepSize)))
Y = np.hstack((np.arange(y_min-offset, block_ymin, stepSize), np.arange(block_ymax, y_max+offset, stepSize)))

XV, YV = np.meshgrid(X, Y)

答案 1 :(得分:0)

我想我是根据@hpaulj的解释弄清楚的(我可能由于低分而无法投票赞成他的建议)。我可以将块附加在allBlocks数组中,然后在allBlocks上运行一个循环,同时禁用网格中的点。这是我的解决方案:

x_new = np.copy(xv)
y_new = np.copy(yv)

ori_x = xv[0][0]
ori_y = yv[0][0]

for block in allBlocks:

    block_xmin = np.min((block[0][0], block[1][0]))
    block_xmax = np.max((block[0][0], block[1][0]))
    block_ymin = np.min((block[0][1], block[1][1]))
    block_ymax = np.max((block[0][1], block[3][1]))

    rx_min, rx_max = int((block_xmin-ori_x)/stepSize), int((block_xmax-ori_x)/stepSize)
    ry_min, ry_max = int((block_ymin-ori_y)/stepSize), int((block_ymax-ori_y)/stepSize)
    for i in range(rx_min,rx_max+1):
        for j in range(ry_min,ry_max+1):
            x_new[j][i] = np.nan
    for i in range(ry_min,ry_max+1):
        for j in range(rx_min,rx_max+1):
            y_new[i][j] = np.nan