2013-11-01 56 views
2

我有4个节点是四边形的顶点。如何将无序点排序为按时间排序的顺序列表?

我需要顺时针或顺时针排列这些顶点。在MATLAB我知道,只是功能ispolycw

不起作用真实的,当它不顺时针此功能排序返回1

是否有任何人谁知道一个函数(或任何建议),我可以将这些顶点排序?

我很感谢您的帮助。

谢谢。

回答

4

我创建了一个函数来做到这一次。我没有代码得心应手,但基本的做法是这样的:

  1. 找到点
  2. 找不到方向的重力中心C从C到每个点
  3. 得到方向的角度从0到2 * PI
  4. 排序

因此,如果点是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, :); 

我现在不能测试这个,但我认为这是正确的(或关闭)。

+0

太棒了!我认为atan2(dv(2,:),dv(1,:))应该是atan2(dv(:,2),dv(:,1))'。以防万一你不知道,你可以[在线编译](http://www.compileonline.com/execute_matlab_online.php),当你无法访问matlab。 – jkshah

+0

对不起,我检查它,但它只返回第一和第二行P. – Rosa

+0

@Rosa试试我的编辑。它为我工作。这只是弗洛里斯无法测试它,索引顺序不正确。 – jkshah