📄 vector2zigzagmtx.m
字号:
%--------------------------------------------------------------------------
%This function performs zigzag scan on a given 2D block.
% Input Arguments: inputMtx = 1D vector, should e square matrix
% Outpuit Argunent: 2D inverse zigzag matrix
%--------------------------------------------------------------------------
function outMtx = Vector2ZigzagMtx(inVector)
[M, N] = size(inVector);
if (M ~= 1)
error('Input vector should be one dimensional row vector');
end
N = sqrt(N);
if(N ~= round(N))
error('Number of elements in the input vector should be square of an integer');
end
outMtx = zeros(N, N);
r = 1; c = 1; inc_r = 0; inc_c = 0;
for n = 1:N*N
outMtx(r, c) = inVector(n);
%for first element
if (c == 1 && r ==1)
inc_r = 0; inc_c = 1;
%for elements at the end of the row or column
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
% for elements at the first row or column
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
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -