旋轉卡殼 Rotating Calipers

2021-05-28 09:51:56 字數 817 閱讀 1896

上週做了一些凸包等計算幾何的問題,感覺挺有意思的,想好好研究一下,發現乙個推薦的英文**,雖然沒有多少,但是還是想試著通過自己做題的領悟加上6級水平的英語來翻譯一下,請批評指正。

原文**:

在2023年, m.i. shamos's 博士**"計算幾何"標誌著這一領域在電腦科學中的誕生。 這在他發表的成果中是乙個尋找凸多邊形直徑的非常簡單的演算法, 換句話說,這個最大距離也就決定了屬於多邊形的一對點。 

後來凸包的直徑變成由一對對踵點對來確定。 shamos提出了乙個簡單的 o(n) 時間的演算法來確定乙個凸 n 角形的對踵點對。 因為他們最多只有 3n/2 對, 所以直徑可以在 o(n) 時間內算出。 

如同toussaint後來提出的, shamos的演算法就像繞著多邊形旋轉一對卡殼。這也就是術語「旋轉卡殼」。 在2023年, toussaint發表了一篇用這種技術解決了許多問題的**。 從那以後, 基於此模型的新演算法就形成了, 解決了許多問題。

凸多邊形直徑

凸多邊形寬

兩個凸多邊形間最大距離

兩個凸多邊形間最小距離

最小面積的外接矩形

最小周長的外接矩形

洋蔥三角剖分

螺旋三角剖分

四邊形剖分

合併凸包

找公切線

凸多邊形交

臨界切線

凸多邊形向量和

最薄橫截面

旋轉卡殼演算法

直接按照這個描述可以實現旋轉卡殼演算法,但是 肯定相當冗長。逆向思考,如果qa,qb是凸包上最遠兩點,必然可以分別過qa,qb畫出一對平行線。通過旋轉這對平行線,我們可以讓它和凸包上的一條邊重合,如圖中藍色直線,可以注意到,qa是凸包上離p和qb所在直線最遠的點。於是我們的思路就是列舉凸包上的所有邊...

旋轉卡殼 x Beauty Contest

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

模板 旋轉卡殼

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