Create a matrix with elements clockwise
1 回表示 (過去 30 日間)
古いコメントを表示
Hello,
I would like to create a [m,n] size matrix in which the ID of the elements are created clockwise/counterclockwise.
The first element should starts in (1,1).

For example, for a matrix of size [5,8] (meaning 40 elements in total) we should have this final matrix:

This should be the result in Matlab:

Thank you in advance for your answers !
0 件のコメント
その他の回答 (1 件)
Joseph Cheng
2021 年 6 月 16 日
While probably not the most efficient way you can fill in edges like i've done here:
clc;clear all
x = zeros(5,8); %generate matrix to be filled with 0's
totN = numel(x);
indexes = 1:totN; %get values to fill in the spiral, here 1:total number for review
cnum=1; %column number to fill in
while numel(indexes)~=0 %while there is still numbers to fill in
for ind = 1:4 %rotate 4 times for 4 edges before next spiral in
zindex = find(x(:,cnum)==0); %for the leading left hand edge see which values are 0
x(zindex,cnum)=indexes(1:numel(zindex)); %fill in where there are 0's by the next 1:#zeros
indexes(1:numel(zindex))=[]; %remove values used from the list
x = rot90(x,-1); %rotate whole matrix so we're just working on a consistant edge
end
disp(x) %display matrix
cnum=cnum+1; %now we've rotated 4 times we're back to original orientation and need to spiral in (next col over)
end
参考
カテゴリ
Help Center および File Exchange で Creating and Concatenating Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!