旋轉卡殼求凸包直徑

2022-05-07 19:15:11 字數 1193 閱讀 6300

直徑即最長的兩點的距離

列舉凸包上的所有邊,對每一條邊找出凸包上離該邊最遠的頂點(用叉積),計算這個頂點到該邊兩個端點的距離,並記錄最大的值。但是注意到當我們逆時針列舉邊的時候,最遠點的變化也是逆時針的,這樣就可以不用從頭計算最遠點,而可以緊接著上一次的最遠點繼續計算。於是我們得到了o(n)的演算法。

複製的圖

常數巨大的醜陋**

# include 

# include

# include

# include

# include

# include

# define rg register

# define il inline

# define ll long long

# define mem(a, b) memset(a, b, sizeof(a))

# define min(a, b) (((a) > (b)) ? (b) : (a))

# define max(a, b) (((a) < (b)) ? (b) : (a))

# define sqr(a) ((a) * (a))

using

namespace

std;

const

int maxn = 50001;

int n, top = 2;

struct point p[maxn], point_a, s[maxn]; //最左下的點

//求叉積(向量ab,向量ac)

il int cross(point a, point b, point c)

//極角排序

il int dis(point a, point b)

il bool cmp(point a, point b)

il void find()

il void graham()

s[++top] = p[n];

}il int rot_cover()

return ans;

}int main()

裸題 beauty contest poj - 218

旋轉卡殼 凸包的直徑

poj 2187 直接求直徑ok 多邊形的直徑被定義為多邊形上任意兩點間的最大距離的值。在多邊形上,決定直徑的點可能不止一對。事實上,如果乙個多邊形含有n個頂點,那麼就最多有 n 對 直徑點對 在。上圖所示的是乙個簡單的多邊形直徑的例項。直徑點對在圖中是被平行的切線 用紅色表示 穿過的黑點.直徑是用...

凸包問題 旋轉卡殼

1978年,m.i.shamos在 computational ceometry 中介紹了一種尋找凸多邊形直徑的線性演算法。1.支撐線 如果一條直線l,通過凸多邊形p的乙個頂點,且多邊形在這條直線的一側,稱l是p的支撐線。2.對踵 zhong,三聲 點 如果過凸包上的兩個點可以畫一對平行直線,使凸包...

模板 凸包 旋轉卡殼

模板 凸包 旋轉卡殼 lrj 訓練指南 p272 對於個點按照 x 從小到大排序,再按照 y 點從小到大排序,刪除重複的點後,得到序列 p0,p1,p2.把 p0 和 p1 放入凸包。從p2開始,當新點在凸包 前進 方向的左邊時繼續,否則依次刪除最近加入凸包的點,直到新點在左邊 ps 判斷用叉積即可...