旋轉卡殼–凸包之間的最大距離

來源:互聯網
上載者:User

 

給定兩個凸多邊形 P 和 Q, 目標是需要找到點對 (p,q) (p 屬於 P 且 q 屬於 Q) 使得他們之間的距離最大。 
很直觀地,這些點不可能屬於他們各自多邊形的內部。 這種情況事實上與直徑問題非常相似: 
兩凸多邊形 P 和 Q 之間最大距離是由多邊形間的對踵點對確定。 雖然這麼說, 但是這個定義與給定的凸多邊形的對踵點對的不同。 和凸多邊形之間的對踵點對本質上的區別在於切線是有向且是反向的。 是一個例子: 



上述結論暗示不單純只是頂點對需要檢測, 而僅僅是考慮特定的頂點對。 事實上他們只檢測一個基於旋轉卡殼模式的演算法確立的平行切線。 
考慮如下的演算法, 演算法的輸入是兩個凸多邊形 P 和 Q,它們分別有 m 和 n 個順時針給定頂點。

                1、計算 P 上 y 座標值最小的頂點(稱為 yminP ) 和 Q 上 y 座標值最大的頂點(稱為 ymaxQ)。

                2、為多邊形在 yminP 和 ymaxQ 處構造兩條切線 LP 和 LQ 使得他們對應的多邊形位於他們的右側。 此時 LP和 LQ 擁有不同的方向, 並且 yminP 和 ymaxQ 成為了多邊形間的一個對踵點對。

                3、計算距離(yminP,ymaxQ) 並且將其維護為當前最大值。

                4、順時針同時旋轉平行線直到其中一個與其所在的多邊形的邊重合。

                5、一個新的對踵點對產生了。 計算新距離, 與當前最大值比較, 如果大於當前最大值則更新。 如果兩條線同時與邊發生重合, 此時總共三個對踵點對(先前頂點和新頂點的組合)需要考慮在內。

                6、重複執行步驟4和步驟5, 直到新的點對為(yminP,ymaxQ)。

                7、輸出最大距離。

旋轉卡殼模式確保了所有的對踵點對都被考慮到。 此外, 整個演算法擁有線性時間複雜度, 因為(除了初始化), 執行步數與頂點數相同。

類似的演算法可以被用於凸多邊形間最小距離問題中。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.