📄 zigzagmtx2vector.asv
字号:
%--------------------------------------------------------------------------
%This function performs zigzag scan on a given 2D block.
% Input Arguments: inputMtx = 2D matrix, should e square matrix
% Outpuit Argunent: 1 D vector
%--------------------------------------------------------------------------
function outputVector = ZigzagMtx2Vector(inputMtx)
[M, N] = size(inputMtx);
if (M ~= N)
outputVector = -1
return
end
outputVector = zeros(N*N, 1);
r = 1; c = 1; inc_r = 0; inc_c = 0;
for n = 1:N*N
display(n)
display(r)
display(c)
outputVector(n) = inputMtx(r, c);
%for firs element
if (c == 1 && r ==1)
inc_r = 0; inc_c = 1;
%
elseif (r == N && mod(c, 2) == 0)
if(mod(N, 2) == 0)
inc_r = -1; inc_c = 1;
else
inc_r = 0; inc_c = 1;
end
elseif (r == N && mod(c, 2) == 1)
if(mod(N, 2) == 0)
inc_r = 0; inc_c = 1;
else
inc_r = -1; inc_c = 1;
end
elseif (c == N && mod(r, 2) == 0)
if(mod(N, 2) == 0)
inc_r = 1; inc_c = 0;
else
inc_r = 1; inc_c = -1;
end
elseif (c == N && mod(r, 2) == 1)
if(mod(N, 2) == 0)
inc_r = 1; inc_c = -1;
else
inc_r = 1; inc_c = 0;
end
elseif (r == 1 && mod(c, 2) == 1)
inc_r = 0; inc_c = 1;
elseif (r == 1 && mod(c, 2) == 0)
inc_r = 1; inc_c = -1;
elseif (c == 1 && mod(r, 2) == 0)
inc_r = 1; inc_c = 0;
elseif (c == 1 && mod(r, 2) == 1)
inc_r = -1; inc_c = 1;
end
c = c + inc_c; r = r + inc_r;
end
display(outputVector);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -