如何将无序点排序为时钟顺序列表?

时间:2013-11-01 05:43:29

标签: matlab sorting

我有4个节点是四边形的顶点。

我需要顺时针或顺时针轮廓排序这些顶点。在MATLAB中我只知道函数ispolycw

不起作用,当它没有顺时针排序时,此函数返回1.

是否有人知道我可以对这些顶点进行排序的功能(或任何建议)?

我很感谢你的帮助。

感谢。

1 个答案:

答案 0 :(得分:4)

我创建了一个执行此操作的函数。我没有方便的代码,但基本方法是:

  1. 找到点的重心C
  2. 找到从C到每个点的方向
  3. 获取方向为0到2 * pi的角度
  4. 排序
  5. 所以,如果积分是P(4,2):

    C = sum(P) / size(P, 1);
    dv = bsxfun(@minus, P, C);
    a = atan2(dv(:,2), dv(:,1)) + pi;
    [s si] = sort(a);
    sortedVertices = P(si, :);
    

    我现在无法测试,但我认为这是正确的(或接近)。