2009-11-22 141 views
2

我在MATLAB中有一個2D笛卡爾點的數組,我想對它們進行排序,以便將它們放入plot將創建一個沒有線重疊的多邊形。MATLAB通過自定義條件排序

(NB。我不是真的要在MATLAB中繪製,我只需要他們以這種方式進行排序)

我想編寫一個循環的,將發現的極座標系的「THETA」對於一個從我知道的多邊形內的新點到多邊形點中的每個點的矢量,然後根據該值進行排序,但它看起來非常冒險和低效!

任何提示?

+0

有很多不同的解決方案。 – 2009-11-22 01:15:09

回答

5

我認爲你的想法就好。

這將使簡單而優雅的解決方案

對於中心找到一點,你可以用「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 * log(n)因爲排序。

+0

那裏有幾個拼寫錯誤 - 但建議非常好!它的工作原理 - 謝謝! – 2009-11-22 01:59:15