You have swapped the dimensions: from smallest to largest the indices are actually
(2,2) (2,3) (3,3) (3,2) (3,1) (2,1) (1,1) (1,2) (1,3)
You have swapped the dimensions: from smallest to largest the indices are actually
(2,2) (2,3) (3,3) (3,2) (3,1) (2,1) (1,1) (1,2) (1,3)
Not quite one line, but you can use sort and ind2sub for this:
>> M = spiral(3) M = 7 8 9 6 1 2 5 4 3 >> [~,idx] = sort(M(:)); >> [R,C] = ind2sub([3,3],idx); >> [R,C] ans = 2 2 2 3 3 3 3 2 3 1 2 1 1 1 1 2 1 3
Or copy the spiral Mfile to your user directory, give it a new name, and edit it to return the indices. It wouldn't be hard to do this, just remember to preallocate the output matrices! Note that the file is copyright.
@Boris Povazay: that specific code is copyright... but I doubt that the algorithm is: online you can find plenty of implementations of the Ulam spiral, e.g.:
https://rosettacode.org/wiki/Ulam_spiral_(for_primes)
which relies on exactly that arrangement of numbers. Note that the Ulam spiral is flipped vertically relative to the MATLAB spiral (in other words: MATLAB is clockwise, Ulam spiral is counter-clockwise). I am sure you could easily implement a version which generates the indices directly.
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!