How to determine blocks in mesh grid?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Xiaohan Du
el 18 de Mayo de 2016
Comentada: Guillaume
el 19 de Mayo de 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 comentarios
Respuesta aceptada
Guillaume
el 19 de Mayo de 2016
Editada: Guillaume
el 19 de Mayo de 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 comentarios
Guillaume
el 19 de Mayo de 2016
This works for grids of any size, square or non-square and uniform or non-uniform.
Más respuestas (0)
Ver también
Categorías
Más información sobre Inputs en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!