poj 2451 半平面求交

2021-05-27 10:32:03 字數 2098 閱讀 7421

半平面求交,按著zzy**裡的方法對著寫就可以了,這題資料還是比較厚道的

#include#include#includeusing namespace std;

#define eps 1e-8

const int maxn=20005;

int dcmp(double k)

struct point

point rev(point r)

point operator-(point r)

point operator+(point r)

bool operator==(point r)

int operator*(point r)

void print()

}p_down[maxn],p_up[maxn],list[maxn];

struct line

void init()

int operator*(line r)

bool str()

void print()

}q[maxn],l_down[maxn],l_up[maxn],pivot,l1,l2,l3,l4;

point intersection(point u1,point u2,point v1,point v2)

double area_polygon(point* p,int k)

int n;

int cnt_down,cnt_up;

int top_down,top_up;

void init()

sort(l_down,l_down+cnt_down,cmp);

sort(l_up,l_up+cnt_up,cmp);

int ct1,ct2;

ct1=1;

for(int i=1;i0) l_down[ct1++]=l_down[i];

else if(is_left(l_down[i],l_down[ct1-1])) l_down[ct1-1]=l_down[i];

}cnt_down=ct1;

ct2=1;

for(int i=1;i0) l_up[ct2++]=l_up[i];

else if(is_left(l_up[i],l_up[ct2-1])) l_up[ct2-1]=l_up[i];

}cnt_up=ct2;

top_down=0;

p_down[0]=l_down[0].u;

point rear,now;

rear=l_down[0].v;

for(int i=1;ip_down[0].y) p_down[0]=p_down[1].rev(p_down[0]);

if(t2<0||t2==0&&p_down[top_down].y=p_up[top_up].x)

p_up[++top_up]=now;

rear=l_up[i].v==now?l_up[i].u:l_up[i].v;

}p_up[++top_up]=rear;

if((p_up[1]-p_up[0])*point(0,-1)>=0) p_up[0]=p_up[1].rev(p_up[0]);

if((p_up[top_up]-p_up[top_up-1])*point(0,-1)>=0) p_up[top_up]=p_up[top_up-1].rev(p_up[top_up]);

}point ll,rr;

int ct1,ct2,p1,p2,p3,p4;

double area()

}if(!find)

ct1=top_down-1;ct2=1;

while(ct2<=top_up&ct1>=0)

}int ct=0;

list[ct++]=ll;

for(int i=p1;i>=p3;i--) list[ct++]=p_up[i];

list[ct++]=rr;

for(int i=p4;i>=p2;i--) list[ct++]=p_down[i];

return area_polygon(list,ct);

}int main()

return 0;

}

poj 2451 半平面交 板子

poj 2451 半平面,一條直線可以把平面分成兩部分,即稱為半平面 半平面交,即多條直線劃分出的相交的平面的面積 學習大佬的 清晰易懂,打算當成以後的模板用了 基於poj 2451 include include include include include using namespace st...

POJ 3525 半平面交

題意 求凸包內切圓最大半徑 題解 二分半徑,將凸包所有邊往凸包內平移這麼半徑長度,看平移後是否能圍成凸包.file main.cpp author swordholy created on 2011年3月25日,下午7 56 求凸包內切圓最大半徑 include include include in...

POJ 1755 Triathlon 半平面交

看的這裡 題意 鐵人三項比賽,給出 個人進行每一項的速度vi,ui,wi 對每個人判斷,通過改變3項比賽的路程,是否能讓該人獲勝 嚴格獲勝 思路 題目實際上是給出了n個式子方程,ti ai x bi y ci z 0 i n 要判斷第i個人能否獲勝,即判斷不等式組 tj ti 0,0 j n j i...