計算幾何模板

2022-07-17 11:12:16 字數 3091 閱讀 9836

基礎模板

1

const

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 }

1

struct

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