計算幾何 模板總結

2021-09-25 05:53:34 字數 2343 閱讀 1026

計算幾何終極模板+總結

//#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 ...