2009-11-22 11 views
2

J'ai un tableau de points cartésiens 2D dans MATLAB et je voudrais les trier de sorte que les mettre dans plot créerait un polygone sans chevauchement de lignes.MATLAB Tri par condition personnalisée

(NB. Je vais pas vraiment à tracer dans Matlab, j'ai juste besoin de les trier de cette manière)

Je pense à écrire une boucle qui trouverait « thêta » du système de coordonnées polaires pour un vecteur allant d'un nouveau point je sais être à l'intérieur du polygone à chacun des points du polygone, puis trier en fonction de cette valeur, mais il semble très hacky et inefficace!

Des conseils?

+0

Il existe de nombreuses solutions différentes. –

Répondre

5

Je pense que votre idée est juste ok.

qui fera solution simple et élégante

Pour trouver le point dans le centre, vous pouvez utiliser "avarege"

len=length(points(:,1)); 
p(1)=sum(points(:,1))/len; 
p(2)=sum(points(:,2))/len; 

angle=atan2(points(:,2)-p(2),points(:,1)-p(1)); 

[angle_sorted,perm]=sort(angle); 
p_sorted=points 
p_sotred(:,1)=points(perm,1); 
p_sotred(:,2)=points(perm,2); 

n'a pas vérifié, mais il devrait être correct.

La complexité est n * log (n) en raison du tri.

+0

Il y a quelques fautes d'orthographe ici - mais le conseil est excellent! Cela fonctionne un régal - merci! –