計算幾何終極模板+總結
//#pragma comment(linker, "/stack:102400000,102400000")
#include "bits/stdc++.h"
#define pb push_back
#define ls l,m,now<<1
#define rs m+1,r,now<<1|1
#define hhh printf("hhh\n")
#define see(x) (cerr<<(#x)<<'='<<(x)inline int read()
const int maxn = 1e5+10;
const int mod = 1e9+7;
const double eps = 1e-9;
//求正負符號
int sgn(double d)
//求x,y大小關係,y預設為0
int dcmp(double x, double y=0)
struct point
};typedef point vector;
vector operator + (vector a, vector b)
vector operator - (point a, point b)
vector operator * (vector a, double p)
vector operator / (vector a, double p)
bool operator < (const point &a, const point &b)
struct line
point point(double t)
};//求兩直線交點,但需保證cross(v,w)!=0,即兩直線不能夾直角
point getlineintersection(point p, vector v, point q, vector w)
//點p到直線ab的距離公式
double distancetoline(point p, point a, point b)
//點p到線段ab的距離公式
double distancetosegment(point p, point a, point b)
//點p在直線ab上的投影點
point getlineprojection(point p, point a, point b)
bool onsegment(point p, point a1, point a2)
//判斷兩條線段是否相交
bool segmentproperintersection(point a1, point a2, point b1, point b2)
return sgn(c1)*sgn(c2)<0 && sgn(c3)*sgn(c4)<0;
}//求多邊形面積,p為頂點集合,n為頂點個數
//方法為從第乙個頂點出發把凸多邊形分成n-2個三角形(另外乙個常用的方法就自己寫吧)
//頂點應按照逆時針順序排列!!!關鍵點
double polygonarea(point *p, int n)
if(wn!=0) return 1;
return 0;
}struct circle
point point(double a)
};//求圓與直線的交點,交點存放在sol裡面
int getlinecircleintersection(line l, circle c, double &t1, double &t2, vector&sol)
//相交
t1=(-f-sqrt(delta))/(2*e);
sol.push_back(l.point(t1));
t2=(-f+sqrt(delta))/(2*e);
sol.push_back(l.point(t2));
return 2;
}//兩個圓相交的面積
double areaofoverlap(point c1, double r1, point c2, double r2)
}lst[k]=lst[0];
lst[0]=p0;
sort(lst+1,lst+n,cmp);
if(n==1)
if(n==2)
stk[0]=0, stk[1]=1, top=2;
for(int i=2; i1&&cross(lst[stk[top-1]]-lst[stk[top-2]],lst[i]-lst[stk[top-2]])<=0) --top;
stk[top]=i, ++top;
}}int main()
計算幾何模板總結(一)
這一部分主要總結一下在 挑戰程式設計競賽 二 中的一些 常用預處理 define eps 1e 10 設定精度 define pi acos 1 精確圓周率 define inf 1e20 設定無限大 define equals a,b fabs a b 利用c 和stl,對一些基本圖形進行了封裝 ...
計算幾何模板總結(二)
直線的正交 平行判定 兩個向量a,b正交,等價於,向量a,b的點積為0 bool isorthogonal vector a,vector b return equals dot a,b 0.0 bool isorthogonal point a1,point a2,point b1,point b...
計算幾何模板
sgn返回x經過eps處理的符號,負數返回 1,正數返回1,x的絕對值如果足夠小,就返回0。const double eps 1e 8 int sgn double x double mysqrt double x pt是point的縮寫 int版 struct pt pt int x,int y ...