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在有向直...