求凸包及凸包上距離最遠點對

2022-03-27 07:51:59 字數 1877 閱讀 2933

證明axb的模是a,b為鄰邊的平行四邊形面積:

在乙個二維平面上距離最遠的兩個點一定在凸包上。

求凸包這裡給出

時間複雜度:o(n㏒n)

思路:graham掃瞄的思想和jarris步進法類似,也是先找到凸包上的乙個點,然後從那個點開始按逆時針方向逐個找凸包上的點,但它不是利用夾角。

步驟:把所有點放在二維座標系中,則縱座標最小的點一定是凸包上的點,如圖中的p0。

把所有點的座標平移一下,使 p0 作為原點,如上圖。

計算各個點相對於 p0 的幅角 α ,按從小到大的順序對各個點排序。當 α 相同時,距離 p0 比較近的排在前面。例如上圖得到的結果為 p1,p2,p3,p4,p5,p6,p7,p8。我們由幾何知識可以知道,結果中第乙個點 p1 和最後乙個點 p8 一定是凸包上的點。

(以上是準備步驟,以下開始求凸包)

以上,我們已經知道了凸包上的第乙個點 p0 和第二個點 p1,我們把它們放在棧裡面。現在從步驟3求得的那個結果裡,把 p1 後面的那個點拿出來做當前點,即 p2 。接下來開始找第三個點:

連線p0和棧頂的那個點,得到直線 l 。看當前點是在直線 l 的右邊還是左邊。如果在直線的右邊就執行步驟5;如果在直線上,或者在直線的左邊就執行步驟6。

如果在右邊,則棧頂的那個元素不是凸包上的點,把棧頂元素出棧。執行步驟4。

當前點是凸包上的點,把它壓入棧,執行步驟7。

檢查當前的點 p2 是不是步驟3那個結果的最後乙個元素。是最後乙個元素的話就結束。如果不是的話就把 p2 後面那個點做當前點,返回步驟4。

最後,棧中的元素就是凸包上的點了。

以下為用graham掃瞄法動態求解的過程:

然後如何求距離最大點對呢,我們運用旋轉卡(qia)殼

證明及性質:

尋找最遠點對(凸包求解)

td走廊裡有一關 勇闖梅花樁 水面上稀稀落落地立著幾根柱子。nova君自認為輕功不錯,覺得可以在任意兩根柱子之間跳躍,現在他想挑戰一次跨越距離最遠的兩根柱子。請問,最遠距離是多少?由於木樁以橫縱座標形式給出,為了計算方便,避免求平方根,答案只需給出距離的平方即可 多組測試資料 組數不超過10 對於每...

凸包 旋轉卡殼 平面最遠點對

題目描述 給定n個點求平面最遠點對 n 50000 題解 嘛。自己想練練手才寫上來的。不過 沒問題的啦 就是像我在計算幾何學習筆記 中說的一樣 先求凸包再旋轉卡殼求就行了 複雜度nlogn 資料可以再大一點的2333 by 減維 include include include include inc...

poj 2187 凸包求最遠距離

這裡很明顯不能直接暴力 50000 50000 我們要知道最遠的兩點一定是凸包上的頂點,所以首先構造凸包,然後列舉找出最遠距離,注意這裡是平方!還要注意n 2的情況,直接求距離 include include include include include include include inclu...