Group 3 * 3 (2d) or 3 * 3 * 3 (3d) coordinates into square blocks?

2 vues (au cours des 30 derniers jours)
Xiaohan Du
Xiaohan Du le 9 Nov 2017
Commenté : Xiaohan Du le 10 Nov 2017
Hi all,
This question might be quite complex. Imagine there is a 3D block like this with the Cartesian coordinates:
There are 27 nodes, corresponding coordinates are (first column denotes a linear index):
K>> coords
coords =
1 -1 -1 -1
2 -1 0 -1
3 -1 1 -1
4 0 -1 -1
5 0 0 -1
6 0 1 -1
7 1 -1 -1
8 1 0 -1
9 1 1 -1
10 -1 -1 0
11 -1 0 0
12 -1 1 0
13 0 -1 0
14 0 0 0
15 0 1 0
16 1 -1 0
17 1 0 0
18 1 1 0
19 -1 -1 1
20 -1 0 1
21 -1 1 1
22 0 -1 1
23 0 0 1
24 0 1 1
25 1 -1 1
26 1 0 1
27 1 1 1
Now I'd like to group these 27 coordinates into small sub-blocks. I labelled these sub-blocks with red numbers, but it's not a must to follow the label sequence. The results should be:
block1:
-1 -1 -1
0 -1 -1
0 -1 0
-1 -1 0
-1 0 -1
0 0 -1
0 0 0
-1 0 0
block2
0 -1 -1
1 -1 -1
1 -1 0
0 -1 0
0 0 -1
1 0 -1
1 0 0
0 0 0
block3
......
Also, the code should work for any dimension, i.e. if there is a 2D square:
The code should be able to sort the coordinates into 4 sub-squares.
Can anyone help me with it? Or is there a toolbox developed for this kind of problem? Really appreciate it!

Réponse acceptée

Matt J
Matt J le 10 Nov 2017
Modifié(e) : Matt J le 10 Nov 2017
The result is the cell array "blocks":
dim=size(coords,2)-1;
L=(dec2bin(0:2^dim-1)-'0')*2-1;
N=size(L,1);
blocks=cell(1,N);
T=coords(:,2:end);
for i=1:N
idx=all(bsxfun(@times,T,L(i,:))>=0,2);
blocks{i}=T(idx,:);
end
  3 commentaires
Matt J
Matt J le 10 Nov 2017
Modifié(e) : Matt J le 10 Nov 2017
In each block, you could compute the angle of the points using atan2() and then sort them according to that.
Xiaohan Du
Xiaohan Du le 10 Nov 2017
Thank you!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Shifting and Sorting Matrices 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