Hello guys,
I have a matrix representing a grid, say
A = [-1 -1; -1 1; 1 -1; 1 1; -1 0; 0 -1; 0 0; 0 1; 1 0];
Every row of A is a Cartesian coordinate. Therefore if you plot a scatter, you'll find that A is a square. My question is: clearly there are four blocks in A: left upper, right upper, left lower, right lower. How can I write a code to generate 4 matrices which each of them represents one block? The result should be something like:
A1 = [-1 -1; 0 -1; -1 0; 0 0],
A2 = [0 -1; 1 -1; 0 0; 1 0],
A3 = [-1 0; 0 0; -1 1; 0 1],
A4 = [0 0; 1 0; 0 1; 1 1].
Thanks!

댓글 수: 2

Image Analyst
Image Analyst 2016년 5월 19일
I think you just did it.
Xiaohan Du
Xiaohan Du 2016년 5월 19일
Hi Image Analyst,
Thanks for the reply!
I know what the answer should be like, and I can do it manually. But with the given matrix, what is the algorithm behind it? What if I have a finer grid? I cannot do it manually forever, it needs to be automatic.

댓글을 달려면 로그인하십시오.

 채택된 답변

Guillaume
Guillaume 2016년 5월 19일
편집: Guillaume 2016년 5월 19일

0 개 추천

This should work:
A = [-1 -1; -1 1; 1 -1; 1 1; -1 0; 0 -1; 0 0; 0 1; 1 0];
%get the sorted unique x and y coordinates:
xy = cellfun(@unique, num2cell(A, 1), 'UniformOutput', false);
x = xy{1};
y = xy{2};
%create output
Agrid = cell(numel(y) - 1, numel(x) - 1);
%iterate through the grid and fill output
for xidx = 1 : numel(x) - 1
for yidx = 1 : numel(y) - 1
Agrid{yidx, xidx} = [repmat(x(xidx:xidx+1), 2, 1), repelem(y(yidx:yidx+1), 2)];
end
end

댓글 수: 3

Xiaohan Du
Xiaohan Du 2016년 5월 19일
Hi Guillaume,
Thanks for the reply!
Before testing this script, mind if I ask will it work for square grid with any size?
Xiaohan Du
Xiaohan Du 2016년 5월 19일
Hi Guillaume,
I just tested, this works for a finer grid as well! Thank you so much!
Guillaume
Guillaume 2016년 5월 19일
This works for grids of any size, square or non-square and uniform or non-uniform.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

질문:

2016년 5월 18일

댓글:

2016년 5월 19일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by