MATLAB按自定义条件排序

时间:2009-11-22 01:04:04

标签: matlab sorting

我在MATLAB中有一组2D笛卡尔点,我想对它们进行排序,以便将它们放入plot会创建一个没有线重叠的多边形。

(注意:我实际上不会在MATLAB中绘图,我只需要以这种方式对它们进行排序)

我正在考虑编写一个循环,它会找到一个向量的极坐标系的'theta',从我知道在多边形内部的新点到每个多边形的点,然后根据该值进行排序,但它似乎非常hacky和低效!

任何提示?

1 个答案:

答案 0 :(得分: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),因为排序。