2009-11-22 137 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