凸包的求法

2021-05-27 03:04:29 字數 620 閱讀 1526

凸包的求法:

現在已經證明了凸包演算法的時間複雜度下界是o(n*logn),但是當凸包的頂點數h也被考慮進去的話,krikpatrick和seidel的剪枝搜尋演算法可以達到o(n*logh),在漸進意義下達到最優。最常用的凸包演算法是graham掃瞄法和jarvis步進法。本文只簡單介紹一下graham掃瞄法,其正確性的證明和jarvis步進法的過程大家可以參考《演算法導論》。

對於乙個有三個或以上點的點集q,graham掃瞄法的過程如下:

令p0為q中y-x座標排序下最小的點 

設為對其餘點按以p0為中心的極角逆時針排序所得的點集(如果有多個點有相同的極角,除了距p0最遠的點外全部移除

壓p0進棧s

壓p1進棧s

壓p2進棧s

for i ← 3 to m

do while 由s的棧頂元素的下乙個元素、s的棧頂元素以及pi構成的折線段不拐向左側

對s彈棧

壓pi進棧s

return s;

此過程執行後,棧s由底至頂的元素就是q的凸包頂點按逆時針排列的點序列。需要注意的是,我們對點按極角逆時針排序時,並不需要真正求出極角,只需要求出任意兩點的次序就可以了。而這個步驟可以用前述的向量叉積性質實現。

BZOJ3348 Cows 凸包 凸包面積

題目鏈結 題意 求凸包,求面積,然後給面積除以50,向下取整。用的andrew演算法,即跑兩次,先求出下凸包,然後再求出上凸包。求面積時候應該用凸包陣列求,結果寫成了原來的點的陣列,調了20多分鐘。弱智 2 telekinetic forest guard include include inclu...

計算物體的凸包

凸包跟多邊形逼近很像,只不過它是物體最外層的 凸 多邊形 集合a內連線任意兩個點的直線都在a的內部,則稱集合a是凸形的。如下圖,紅色的部分為手掌的凸包,雙箭頭部分表示凸缺陷 convexity defects 凸缺陷常用來進行手勢識別等 設定全域性引數 mat srcimage,srcgray in...

poj1113 求凸包 計算凸包周長

經典的求凸包題,模板題。要求用資源最少,那肯定這個多邊形是個凸多邊形,也就是凸包。所以先求出凸包,計算它的周長。還有就是這道題所說的,要離城牆l遠,其實就是在加上乙個圓的周長,圓的半徑就是l。都說到這了,這道題還差什麼?還差乙個經典的凸包模板!哈哈 如下 include include includ...