基礎模板:
1const
double eps = 1e-10;2
const
double pi = 3.1415926535897;3
struct
point47
};8typedef point vector;910
struct line//
有向直線
1116
bool
operator
< (const line& l)const
1720
};21 vector operator + (vector a, vector b)//
向量+向量=向量;點+向量=向量
22 vector operator - (vector a, vector b)//
點-點=向量
23 vector operator * (vector a, double p)//
向量*數=向量
24 vector operator / (vector a, double p)//
向量/數=向量
25bool
operator
< (const point& a, const point&b)
2629
int dcmp(double x)//
三態函式,高精度判斷
3033
bool
operator == (const point& a, const point&b)
3437
double dot(vector a, vector b)//
點積38
double length(vector a)//
長度39
double angle(vector a)//
向量a的極角(弧度)
40double angle(vector a, vector b)//
向量a,b夾角
41double cross(vector a, vector b)//
叉積42
double area2(point a, point b, point c)//
三角形有向面積的兩倍
43 vector rotate(vector a, double
rad)
44//
向量a逆時針旋轉rad(弧度)
4548
vector normal(vector a)
49//
返回a的單位法線,呼叫前保證a非零
5054
55 point getlineintersection(point p, vector v, point q, vector w)//
(引數式)
56//
求直線p+tv和q+tw交點(t為引數)。呼叫前確保有交點,無交點當且僅當cross(v, w) = 0;
5762 point getlineintersectionb(point p, point x, point q, point y)//
(兩點式)
63//
求直線px和qy交點(t為引數)。呼叫前確保有交點,無交點當且僅當cross(v, w) = 0;
6468
double
distancetoline(point p, point a, point b)
69//
點p到直線ab的距離
7074
double
distancetosegment(point p, point a, point b)
75//
點p到線段ab的距離
7683
point getlineprojection(point p, point a, point b)
84//
點p在直線ab上的投影
8589
bool
segmentproperintersection(point a1, point a2, point b1, point b2)
90//
判斷線段a1a2和b1b2是否規範相交(在端點處相交得用下乙個函式特殊判斷)
9196
bool onsegment(point p, point a1, point a2)//
97//
98101
bool onsegment2(point p, point a1, point a2)//
102//
103
多邊形:
1//多邊形面積
2double polygonarea(point* p, intn)3
910//點在多邊形內判定
11int ispointinpolygon(point p, point * poly, int
n)12
23if(wn != 0)return
1;//
內部24
return
0;//
外部25}26
27//
凸包:輸入點陣列p,個數為n,輸出點陣列為ch,返回輸出點個數
28//
輸入不能有重複點,函式執行完輸入點順序被破壞
29//
如果不希望凸包的邊上存在輸入點,把兩個<=改成<
30int convexhull(point* p, int n, point *ch)
3139
int k =m;
40for(int i = n - 2; i >= 0; i--)
4145
if(n > 1)m--;
46return
m;47 }
圓
1struct
circle
26 circle(point c, double
r):c(c), r(r){}
7 point point(double a)//
在圓上圓心角為a的點
811 };
計算幾何模板
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 ...
計算幾何模板
include define vct point using namespace std const double pi atan2 0,1 const double eps 1e 8 int sgn double d struct point bool operator point b const...
計算幾何模板
多圓面積交 typedef long long ll typedef unsigned long long ull typedef vector vi const int inf 0x3f3f3f3f const double eps 1e 10 const int mod 100000007 co...