我最近越来越多地进入 Matlab 并且在我最近的项目中出现了另一个问题。我在一个整体边界内生成了几个矩形(或网格)。这些网格可以具有不同的间距/间隔。
我这样做是因为我想降低数字高程模型某些区域的网格/像素分辨率。到目前为止,一切正常。但是因为可以在 GUI 中选择矩形,所以矩形可能会重叠。这种重叠是我想要找到并删除的。它们是否具有相同的间距,例如矩形 1&2 看起来像这样:
[t1x, t1y] = meshgrid(1:1:9,1:1:9);
[t2x, t2y] = meshgrid(7:1:15,7:1:15);
[t3x, t3y] = meshgrid(5:1:17,7:1:24);
在这种情况下,我可以只使用 unique 来查找重叠区域。但是,它们看起来更像这样:
[t1x, t1y] = meshgrid(1:2:9,1:2:9);
[t2x, t2y] = meshgrid(7:3:15,7:3:15);
[t3x, t3y] = meshgrid(5:4:17,7:4:24);
因此,无法应用唯一性,因为网格 1 很可能与网格 2 重叠而没有相同的节点。为了方便和进一步处理,所有矩形/网格都被带入列符号,并在我的代码中放入一个结果矩阵:
result = [[t1x(:), t1y(:)]; [t2x(:), t2y(:)]; [t3x(:), t3y(:)]];
现在我正在考虑使用 2 个嵌套的 for 循环来解决这个问题,就像这样(这还不太好用):
res = zeros(length(result),1);
for i=1:length(result)
currX = result(i,1);
currY = result(i,2);
for j=1:length(result)
if result(j,1)< currX < result(j+1,1) && result(j,2)< currY < result(j+1,2)
res(j) = 1;
end
end
end
但是:首先,这还不完全奏效,因为由于 length(result)=j+1 而我得到了一个越界错误,而且 res(j) = 1 似乎被循环覆盖了。但这只是为了测试和演示。因为这里显示的网格只是示例,而我使用的网格相当大,结果矩阵最多包含 2000x2000 = 4 个 mio 节点 --> 长度(结果)~4mio。把它放到一个贯穿整个长度的嵌套 for 循环中很可能会扼杀我的记忆。
因此,我希望找到一个不需要嵌套循环但利用 Matlabs 查找和巧妙的矩阵索引的复杂解决方案。我想不出什么,但希望能在这里得到帮助。
非常感谢讨论和帮助!
干杯,
西奥