0

誰かが尋ねる前に、これは以前の質問の再投稿ですが、回答があるため削除できません。ダニエル R が回答してくれることを願っています。

strfind数字のグリッドがあり、8 方向のいずれかで数字の文字列を読みたいと考えています。私がなんとかうまく機能させることができた非対角のもの、それは私が苦労してきた対角のものです(downRightDaniel Rが以前に私を助けてくれたことを除いて、私は非常に感謝しています)!

コードは次のとおりです。

A = [5,16,18,4,9;
    9,10,14,3,18;
    2,7,9,11,21;
    3,7,2,19,22;
    4,9,10,13,8]

for r = 1:5
    for diags = -5:5
        downRight = strfind(diag(A,diags)', [10,9,19]);
        if isempty(downRight) == 0;
            rowOfFirstNum = downRight(1)+max(-diags,0);
            columnOfFirstNum = downRight(1)+max(diags,0);
        end
        downLeft = strfind(diag(rot90(A),diags)', [11,2,9]);
        if isempty(downLeft) == 0;
            %rowOfFirstNum = 
            %columnOfFirstNum = 
        end
        upLeft = strfind(diag(rot90(A,2),diags)', [19,9,10]);
        if isempty(upLeft) == 0;
            %rowOfFirstNum = 
            %columnOfFirstNum = 
        end
        upRight = strfind(diag(rot90(A,3),diags)', [3,7,14,4]);
        if isempty(upRight) == 0;
            %rowOfFirstNum = 
            %columnOfFirstNum = 
        end
    end
end

downRight動作しますが、他のものを適切に動作させる方法がわかりません。各方向をテストするには、他の 3 つをコメントアウトする必要があることに注意してください。

ありがとうございました。

4

1 に答える 1

1

個人的に私に宛てた質問、おそらく私は答えを書かなければなりません:)

4 つのケースすべてを実装する代わりに、一般的なケースを作成しました。すでに気づいたように、4 つのケースはrot90(rot90(X,0)何もしない) を使用して作成できます。

インデックスを取得するために、行番号と列番号を含むメッシュグリッドを作成しました。rot90との同じプロセスを実行するだけでdiag、どのインデックスがその位置に移動したかがわかります。

最後に、外側のループ ( for r = 1:5) は単純にすべてを繰り返します。

A = [5,16,18,4,9;
     9,10,14,3,18;
     2,7,9,11,21;
     3,7,2,19,22;
     4,9,10,13,8];
[col,row]=meshgrid(1:size(A,1));


 x=[10,9,19];
% x=[11,2,9];
% x=[19,9,10];
% x=[3,7,14,4];
for diags = -5:5
    for direction=0:3
        loc = strfind(diag(rot90(A,direction),diags)', x);
        if ~isempty(loc)
            colT=diag(rot90(col,direction),diags);
            rowT=diag(rot90(row,direction),diags);
            rowOfFirstNum=rowT(loc)
            columnOfFirstNum=colT(loc)
            switch direction
            case 0
                %code for downRight
            case 1
                %code for downLeft
            case 2
                %code for upLeft
            case 3
                %code for upRight
            end
        end
    end
end
于 2013-12-12T22:49:44.473 に答える