?? listorder.m
字號:
function lsorder=listorder(mr,mc,pr,pc)
% 函數 LISTORDER() 生成按‘Z’型遞歸結構排列的坐標列表
% 函數遞歸原理:對一個mr*mc的矩陣,其左上角元素的坐標為(pr,pc);首先將矩陣按“田”
% 字型分成四個對等的子矩陣,每個子矩陣的行、列數均為mr/2、mc/2,左上角元素的坐標
% 從上到下、從左到右分別為(pr,pc)、(pr,pc+mc/2)、(pr+mr/2,pc)、(pr+mr/2,pc+mc/2)。
% 把每個子矩陣再分裂成四個矩陣,如此遞歸分裂下去,直至最小矩陣的行列數等于2,獲取最小
% 矩陣的四個點的坐標值,然后逐步向上回溯,即可得到按‘Z’型遞歸結構排列的坐標列表。
lso=[pr,pc;pr,pc+mc/2;pr+mr/2,pc;pr+mr/2,pc+mc/2];
% 列表lso是父矩陣分裂成四個子矩陣后,各子矩陣左上角元素坐標的集合
mr=mr/2;
mc=mc/2;
% 子矩陣的行列數是父矩陣的一半
lm1=[];lm2=[];lm3=[];lm4=[];
if (mr>1)&&(mc>1)
% 按‘Z’型結構遞歸
ls1=listorder(mr,mc,lso(1,1),lso(1,2));
lm1=[lm1;ls1];
ls2=listorder(mr,mc,lso(2,1),lso(2,2));
lm2=[lm2;ls2];
ls3=listorder(mr,mc,lso(3,1),lso(3,2));
lm3=[lm3;ls3];
ls4=listorder(mr,mc,lso(4,1),lso(4,2));
lm4=[lm4;ls4];
end
lsorder=[lso;lm1;lm2;lm3;lm4];
% 四個子矩陣結束遞歸回溯到父矩陣時,列表lsorder的頭四個坐標值為列表lso的元素
% 這四個坐標值與后面的各個子矩陣的坐標元素有重疊,故需消去
% 當函數輸出的列表長度length(lsorder)與矩陣的元素個數mr*mc*4不相等時,
% 就說明有坐標重疊發生。
len=length(lsorder);
lsorder=lsorder(len-mr*mc*4+1:len,:);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -