2

行列内のセル (行、列) の「深さ」を見つける関数を作成する必要があります。

たとえば、nxm行列が与えられmat = ones(6,6)た場合..

mat =

     1     1     1     1     1     1
     1     1     1     1     1     1
     1     1     1     1     1     1
     1     1     1     1     1     1
     1     1     1     1     1     1
     1     1     1     1     1     1

結果は次のようになります。

thick =

     1     1     1     1     1     1
     1     2     2     2     2     1
     1     2     3     3     2     1
     1     2     3     3     2     1
     1     2     2     2     2     1
     1     1     1     1     1     1

ここで、"1" はエッジ セルを定義する最小の厚さです。周囲のセルが追加されるたびに、+1 の厚みが追加されます。NANが境界上にある場合、「エッジ」として処理する必要があります...しかし、後でそれを構築できると思います。

アイデア?どんな助けでも感謝します。ありがとう!

編集:

元の編集を削除しました。元の問題を再考する必要があります。基本的に、マトリックス内の最も深いセルを見つけたいと思っています。行列は規則的である必要はなく、穴があってもかまいません。通常、これはポリゴンを使用してそのポリゴン内に収まる最大の円の直径を見つけることで達成されますが、MATLAB でそれをどの程度効率的に実装できるかはわかりません。うーん....

4

2 に答える 2

1

ここに 1 次元のヒントがあります: 行列として m が与えられた場合:

m=ones(1,6)
i=1:length(m);
depth(i<=length(m)/2)=i(i<=length(m)/2);
depth(i>length(m)/2)=length(m)-i(i>length(m)/2)+1

メートル=

 1     1     1     1     1     1

深さ =

 1     2     3     3     2     1
于 2012-11-26T06:06:53.693 に答える
0

次のロジックを中心に関数を構築できます (疑似コードをここに示します)。

depth(m):
   M = size(m,1);
   N = size(m,2);
   thick = zeros(M,N);
   for i=1:M
        for j = 1:N
            thick(i,j) = min(i,M-i+1,j,N-j+1);
   return thick;

Whereは、 1 からインデックス付けされたマトリックス内の要素depth(m)の深さを返します。(i,j)MxNm

于 2012-11-26T06:01:18.680 に答える