sort a matrix in a specific way

1 vue (au cours des 30 derniers jours)
LH
LH le 3 Nov 2022
Commenté : LH le 4 Nov 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 commentaires
dpb
dpb le 3 Nov 2022
I don't really see what is "sorted" about the result??? How did you arrive at that particular permutation?
LH
LH le 3 Nov 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.

Connectez-vous pour commenter.

Réponse acceptée

Matt J
Matt J le 3 Nov 2022
Modifié(e) : Matt J le 3 Nov 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 commentaires
LH
LH le 3 Nov 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 le 3 Nov 2022
I have given a second answer which should keep all of the points.

Connectez-vous pour commenter.

Plus de réponses (1)

Matt J
Matt J le 3 Nov 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 commentaires
Matt J
Matt J le 3 Nov 2022
You can use circshift to choose the starting point for the list.
LH
LH le 4 Nov 2022
Great. Thanks.

Connectez-vous pour commenter.

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