題意:
求兩個凸包的最近距離。
題解:原來旋轉卡殼這麼暴力。。我以前一直以為是o(n)的。。。
畫畫圖,用叉積判斷下旋轉角度就行了~
view code
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7這題太坑了,凸包寫錯了都能ac。。8#define n 22222
9#define pi 3.14159265358979
10#define eps 1e-7
1112
using
namespace
std;
1314
struct
po15
p1[n],p2[n],o;
1819
intn,m,top1,top2,stk1[n],stk2[n];
2021 inline int doublecmp(double
x)22
2728 inline bool cmp(const po &a,const po &b)
2933
34 inline void
read()
3539
40 inline po operator +(po a,po b)
4147
48 inline po operator -(po a,po b)
4955
56 inline double dot(po &a,po &b,po &c)
5760
61 inline double cross(po &a,po &b,po &c)
6265
66 inline double getlen(po &a)//
向量的模
6770
71 inline po getty(po b,po a)//
投影向量
7278
79 inline double getangle(po &a,po &b,po&c,po &d)
8084
85 inline po rotate(po a,double
hd)86
9293 inline double getdis(po &a,po &b)
9497
98 inline double getdis_ps(po &a,po &b,po &c)
99108
109 inline void graham(po *p,int *stk,int &top,int
gs)110
119int tmp=top;
120for(int i=gs-1;i>=1;i--)
121125
}126
127 inline double
rotating_calipers()
128147
else
if(doublecmp(af)>0)//
卡殼到第乙個的邊,第二個的點
148152
else
//卡殼到第二個的邊,第乙個的點
153157 }while(t1!=s1||t2!=s2);
158return
ans;
159}
160161 inline void
go()
162167
168int
main()
169
害得我下一道題直接粘的這個凸包,wa了一下午。。
POJ 3608 旋轉卡殼求解凸包間的最短距離
題意給你兩個凸包,求解兩個凸包間的最短距離。include include include include include using namespace std define max n 10000 10 define inf 0x3f3f3f3f define eps 1e 10 struct ...
旋轉卡殼 POJ2079
推介blog 1.旋轉卡殼求凸包直徑 如上圖 我們定起始點為a,首先從a點開始你順時針找到凸包上距離a點最大距離的e點 由於a到f的距離小於a到e的距離,此時我們旋轉線的左端點到b點,再去計算b到f的距離,之後旋轉線段的右端點,發現bg的距離小於bf,此繼續旋轉左端點到下乙個頂點。每次旋轉卡殼的操作...
poj 2187(旋轉卡殼)
傳送門 模板題,求凸包,用旋轉卡殼求出最遠點對。因為把int弄成double,wa了好幾次,差點對idy大神給的模板失去信心。不過事實證明idy的寫法沒問題,orz!include include include include include include using namespace std...