1. 程式人生 > >任意多邊形頂點排序和凸包計算

任意多邊形頂點排序和凸包計算

1,理論

凸包計算演算法導論上有講,關鍵步驟是根據對頂點進行逆時針排序。凸包頂點只是多邊形頂點子集。

圖-1

如圖1中,判斷三個點構成順時針還是逆時針方向。使用向量點積即可:

向量A<beg, end>

向量B<beg, next>

A.dot(B) 是一個實數,大於0,則逆時針,小於0則順時針。

2,效果圖:

圖 - 2

圖 - 3

圖2是隨機生成了三十個點。

圖3是黃色線條是排序以後順序連結,外面淡藍色線條是凸包。注意排序以後的頂點只保證順序連線的順序,不能保證所有頂點逆時針/順時針排序。。。而且中間非常有可能是z型,即順時針/逆時針翻轉~

3,可執行程式

freeglut2.6.0