2013-11-01 87 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