Before anyone asks, this is a repost of an earlier question, but I cannot delete it because it has answers, so I am modifying it so that hopefully Daniel R will answer it!
I have a grid of numbers and I want to read a string of numbers with strfind
in any of the 8 directions. The non-diagonal ones I have managed to get to work fine, it is the diagonal ones that I have been struggling with (except for downRight
which Daniel R helped me with earlier which I am very thankful for)!
Here is the code:
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
works, but I am not sure of how to get the others to work properly. Just to note, to test each direction the other 3 need to be commented out.
Thank you.
A question personally addressing me, probably I must write an answer :)
Instead of implementing all 4 cases, I wrote a generic case. As you already noticed, the 4 cases can be produced using
rot90
(rot90(X,0)
does nothing).To get the indices, I created a meshgrid which contains row- and columnnumbers. Simply put it through the same process of
rot90
anddiag
, to see which index was moved to the position.Finally, the outer loop (
for r = 1:5
) simply repeats everything.