0

私は最近ますます 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 と非常によく重なる可能性があるため、一意は適用できません。利便性とさらなる処理のために、すべての長方形/メッシュは列表記になり、コード内の 1 つの結果マトリックスに配置されます。

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 ノード --> length(result) ~4mio が含まれます。これをネストされた for ループの全長にわたって実行すると、おそらく私の記憶が失われます。

したがって、ネストされたループを必要とせず、Matlabs の検索と巧妙な行列インデックスを利用する洗練されたソリューションを見つけたいと思っていました。私は何かを考えることができませんが、ここで助けを得たいと思っていました.

ディスカッションとヘルプは大歓迎です!

乾杯、

テオ

4

1 に答える 1