旋轉卡殼演算法

2021-07-10 07:50:24 字數 608 閱讀 6065

}直接按照這個描述可以實現旋轉卡殼演算法,但是**肯定相當冗長。逆向思考,如果qa,qb是凸包上最遠兩點,必然可以分別過qa,qb畫出一對平行線。通過旋轉這對平行線,我們可以讓它和凸包上的一條邊重合,如圖中藍色直線,可以注意到,qa是凸包上離p和qb所在直線最遠的點。於是我們的思路就是列舉凸包上的所有邊,對每一條邊找出凸包上離該邊最遠的頂點,計算這個頂點到該邊兩個端點的距離,並記錄最大的值。直觀上這是乙個o(n2)的演算法,和直接列舉任意兩個頂點一樣了。但是注意到當我們逆時針列舉邊的時候,最遠點的變化也是逆時針的,這樣就可以不用從頭計算最遠點,而可以緊接著上一次的最遠點繼續計算(詳細的證明可以參見上面鏈結中的**)。於是我們得到了o(n)的演算法。

int rotating_calipers(point *ch,int n)

return ans;

}

完全是搬運的:

旋轉卡殼 Rotating Calipers

上週做了一些凸包等計算幾何的問題,感覺挺有意思的,想好好研究一下,發現乙個推薦的英文 雖然沒有多少,但是還是想試著通過自己做題的領悟加上6級水平的英語來翻譯一下,請批評指正。原文 在1978年,m.i.shamos s 博士 計算幾何 標誌著這一領域在電腦科學中的誕生。這在他發表的成果中是乙個尋找凸...

旋轉卡殼 x Beauty Contest

旋轉卡qia殼ke好難理解啊。其實是蒟蒻太菜了 本題不難看出是求凸包直徑 旋轉卡殼演算法最基本的用法也是求凸包直徑 我們可以把它當作用兩根平行的小棍夾緊凸包 然後旋轉凸包一周 小棍間最大的距離 對於乙個凸包 按一般求法排序很容易能得到最左邊的點和最右邊的點 它們之間的距離就是讓小棍和y軸平行時的間距...

模板 旋轉卡殼

link 模板乙個。其實感覺說是求凸包的直徑倒不如說是求平面內最遠點對,畢竟它的輸入沒保證是個凸包,自己還要再求一遍啊 旋轉卡殼的思想十分優雅易懂,就是先證明平面內最近點對一定是凸包上兩點,再根據這個結論,列舉每一條邊的同時找出離線段最遠的點並更新答案即可。為了盡可能地降低找點的複雜度,對問題進行分...