半平面交 板子

2022-04-29 23:45:06 字數 1319 閱讀 7402

poj 2451

敲了個板子,比帶花樹稍微好一些,但是還是很麻煩...

寫了點注釋

#include #include #include #define point vector

const int n=2e4+10;

struct vector

vector(double x,double y)

double angle()//極角

vector friend operator *(vector a,double b)//向量數乘

vector friend operator +(vector a,vector b)//向量加

vector friend operator -(vector a,vector b)//向量減

}qp[n],ans[n];

const double eps=1e-7;

bool dcmp(double a,double b)

}li[n],ql[n];

double cross(vector a,vector b)//向量外積

bool cmp(line a,line b)//極角從小到大排序

bool pingxing(line a,line b)//平行外積為0

point jiaodian(line a,line b)//交點,這個要畫圖

double area(point *s,int n)//求凸多邊形面積

bool isrig(line a,point b)//判斷點是否在向量右邊

int l,r;

bool si(line *li,int n,point *ret,int &m)//增量法求半平面交

while(lwhile(lif(r-l<=1) return false;//直線少於2個,沒得

qp[r]=jiaodian(ql[l],ql[r]);//首尾交點

m=0;for(int i=l;i<=r;i++) ret[++m]=qp[i];

return true;

}int main()

a=point(0,0),b=point(10000,0),c=point(10000,10000),d=point(0,10000);

li[++n]=line(a,b),li[++n]=line(b,c),li[++n]=line(c,d),li[++n]=line(d,a);

if(si(li,n,ans,m)) printf("%.1lf\n",area(ans,m));

else puts("0.0");

return 0;

}

poj 2451 半平面交 板子

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

旋轉卡殼 半平面交板子 poj 2079

sampleinput 編輯3 3 42 6 2 75 2 63 9 2 08 0 6 5 1 sampleoutput 編輯0.50 27.00 pragma comment linker,stack 1024000000,1024000000 include include include in...

半平面交模板

妹的,一直沒有想清楚無解的情況到底是如何判斷的。偷來乙個模板。半平面交的結果 1.凸多邊形 後面會講解到 2.無界,因為有可能若干半平面沒有形成封閉3.直線,線段,點,空 屬於特殊情況吧 演算法 1 根據上圖可以知道,運用給出的多邊形每相鄰兩點形成一條直線來切割原有多邊形,如果多邊形上的點i在有向直...