作者YoursEver (beyond the time!)
看板MATLAB
标题Re: [讨论] 排列问题
时间Fri May 12 10:50:08 2017
※ 引述《joehome (三碗猪脚)》之铭言:
: 如何将有顺序的64个数值 排成矩阵(螺旋排列)
: 目前可以一列一列的排
: 想请教螺旋排列
: 有语法吗
: -----
: Sent from JPTT on my iPhone
这问题很简单,
你应该要仔细画图把 1,4,9,16,...,k^2 个数值的顺序画出来,
写个递回式就结束了.
以下是顺时排列的code,
10分钟就能写好.
建议你想一下之後,把其他的排列方式自己补完吧.
==
function Mapping_Mtx = spiral_mapping( m_current_Lv )
% writtend by STARSTAR ([email protected])
if m_current_Lv > 1
Prev_Mtx = spiral_mapping( m_current_Lv-1 );
Array_Number_thisLv = (1+(m_current_Lv-1)^2):1:m_current_Lv^2;
if mod(m_current_Lv,2)==0
buffer = zeros( size(Prev_Mtx) + [1 1]);
buffer(1:size(Prev_Mtx,1), 1:size(Prev_Mtx,2)) = Prev_Mtx(:,:);
buffer(:, end) = Array_Number_thisLv(1:ceil(end/2));
buffer(end,1:end-1) = Array_Number_thisLv( end:-1:ceil(length(Array_Number_thisLv)/2+1) );
Mapping_Mtx = buffer;
else %mod(m_current_Lv,2)==1
buffer = zeros( size(Prev_Mtx) + [1 1]);
buffer(end-size(Prev_Mtx,1)+1:end, end-size(Prev_Mtx,2)+1:end) = Prev_Mtx(:,:);
buffer(1, :) = Array_Number_thisLv(ceil(end/2):1:end);
buffer(end:-1:2,1) = Array_Number_thisLv( 1:1:floor(length(Array_Number_thisLv)/2 ));
Mapping_Mtx = buffer;
end
else%if m_current_Lv==1
Mapping_Mtx = [1];
end
end
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.22.216
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1494557411.A.00B.html
1F:推 joehome: 感谢您 05/12 15:19