How to determine blocks in mesh grid?

2 vues (au cours des 30 derniers jours)
Xiaohan Du
Xiaohan Du le 18 Mai 2016
Commenté : Guillaume le 19 Mai 2016
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 commentaires
Image Analyst
Image Analyst le 19 Mai 2016
I think you just did it.
Xiaohan Du
Xiaohan Du le 19 Mai 2016
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.

Connectez-vous pour commenter.

Réponse acceptée

Guillaume
Guillaume le 19 Mai 2016
Modifié(e) : Guillaume le 19 Mai 2016
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 commentaires
Xiaohan Du
Xiaohan Du le 19 Mai 2016
Hi Guillaume,
I just tested, this works for a finer grid as well! Thank you so much!
Guillaume
Guillaume le 19 Mai 2016
This works for grids of any size, square or non-square and uniform or non-uniform.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by