sort a matrix in a specific way

2 visualizaciones (últimos 30 días)
LH
LH el 3 de Nov. de 2022
Comentada: LH el 4 de Nov. de 2022
Hi,
I have two matrices that correspond to points coordinates and I want to sort their concatenation in a way illustrated below as following:
%first matrix
A = [0.1 0;
0.5 0;
1 0.3;
1 0.7;
0.6 1;
0.1 1;
0 0.9;
0 0.2];
%second matrix
B = [0 0;
1 0;
1 1;
0 1];
%concatenate
C = [A ; B];
%sort matrix C in a way that all cooridnates are sorted in a square-like manner and looks like:
% C = [0 0;
% 0.1 0;
% 0.5 0;
% 1 0;
% 1 0.3;
% 1 0.7;
% 1 1;
% 0.6 1;
% 0.1 1;
% 1 0;
% 1 0.9;
% 0 0.2];
Any help would be appreicted.
  2 comentarios
dpb
dpb el 3 de Nov. de 2022
I don't really see what is "sorted" about the result??? How did you arrive at that particular permutation?
LH
LH el 3 de Nov. de 2022
All coordinates are in a square-like order. If you imagine you have a square with vertices x=[0 1 1 0] and y[0 0 1 1], then if you have points along its edges, they must be order like matrix C.

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 3 de Nov. de 2022
Editada: Matt J el 3 de Nov. de 2022
%first matrix
A = [0.1 0;
0.5 0;
1 0.3;
1 0.7;
0.6 1;
0.1 1;
0 0.9;
0 0.2];
%second matrix
B = [0 0;
1 0;
1 1;
0 1];
%concatenate
C = [A ; B];
k = convhull(C);
C=C(k,:)
C = 13×2
0.1000 0 0.5000 0 1.0000 0 1.0000 0.3000 1.0000 0.7000 1.0000 1.0000 0.6000 1.0000 0.1000 1.0000 0 1.0000 0 0.9000
  4 comentarios
LH
LH el 3 de Nov. de 2022
Thanks, makes sense. Is there another command/method I can use to do the extact sorting but with keeping all points? If not, I believe coding this will be the only way.
Matt J
Matt J el 3 de Nov. de 2022
I have given a second answer which should keep all of the points.

Iniciar sesión para comentar.

Más respuestas (1)

Matt J
Matt J el 3 de Nov. de 2022
A = [0.1 0;
0.5 0;
1 0.3;
1 0.7;
0.6 1;
0.1 1;
0 0.9;
0 0.2];
%second matrix
B = [0 0;
1 0;
1 1;
0 1];
%concatenate
C = [A ; B];
D=normalize(C,'center');
[~,k]=sort(atan2(D(:,2),D(:,1)));
C=C(k,:)
C = 12×2
0 0.2000 0 0 0.1000 0 0.5000 0 1.0000 0 1.0000 0.3000 1.0000 0.7000 1.0000 1.0000 0.6000 1.0000 0.1000 1.0000
  3 comentarios
Matt J
Matt J el 3 de Nov. de 2022
You can use circshift to choose the starting point for the list.
LH
LH el 4 de Nov. de 2022
Great. Thanks.

Iniciar sesión para comentar.

Categorías

Más información sobre Shifting and Sorting Matrices 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!

Translated by