Re: [討論] 排列問題
※ 引述《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 (YoursEver@Ptt.cc)
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://www.ptt.cc/bbs/MATLAB/M.1494557411.A.00B.html
推
05/12 15:19, , 1F
05/12 15:19, 1F
討論串 (同標題文章)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章