計算幾何大模板(持續更新)

2021-09-10 19:54:03 字數 2498 閱讀 5614

計算幾何說起來都是一套一套的,寫起來卻讓人二楞二楞的qwq

接下來直接粘**,稍微高階的演算法講解詳見超連結

【基本的定義&演算法】

#include

const

double eps =

1e-7

;//誤差允許範圍,廣泛用於大小比較

inline

double

dcmp

(double x)

//強烈建議浮點數的大小比較都用這個函式

struct point

point

(double a,

double b):x

(a),

y(b)

//算極角

friend

double

dots

(point a, point b)

//點積

friend

double

cross

(point a, point b)

//叉積

friend

double

dist

(point a, point b)

//模長

point operator+(

const point a)

const

//向量加法

point operator-(

const point a)

const

//兩點間的向量、向量的減法

point operator*(

const

double a)

const

//向量的數乘

bool

operator

<

(const point a)

const

bool

operator==(

const point a)

const

/*關係運算子因題而異(此處的過載用於極角排序)*/};

struct line

line

(point a, point b):p

(a),

v(b - a)

//算極角

friend point get_cross

(line a, line b)

//求交點

friend

bool

onleft

(line a, point b)

//判方向

bool

operator

<

(const line a)

const

/*關係運算子因題而異(此處的過載用於極角排序)*/};

inline

double

get_s

(int n)

//多邊形面積

intmain()

求凸包

//由於極角排序的演算法導致點的儲存不穩定(即無論如何處理,都可能會有一些邊上點無法完全保留或完全剔除,故採用以x為第一關鍵字,y為第二關鍵字的方法)

//本模板將所有凸包上的點都保留了下來

point stk[mn]

, p[mn]

//為保證好讀,此處的point已根據需要過載運算子「<」和「==」;

int top;

inline

void

make_polygon

(int n)

/*上下凸殼各做一次,然後合併得凸包*/

for(i = n; i; i--

)int siz =

unique

(stk +

1, stk +

1+ top)

- stk -1;

//去重

}

半平面交

point p[mn]

;int cnt, h, t;

line q[mn]

, l[mn]

;inline

double

merge_halfplane

(int cnt)

if(h < t)

p[t -1]

=get_cross

(q[t -1]

, q[t]);

//獲取交點

}while

(h < t &&

!onleft

(q[h]

, p[t -1]

)) t--

;//判斷首尾連線處

p[t]

=get_cross

(q[t]

, q[h]);

return

get_s

(h, t)

;//算面積

}

計算幾何,持續更新

先放兩個比較好的部落格 模板比較全的 1.叉積 兩個點l a,b r c,d lr向量等於 c a,d b 兩個向量p x1,y1 q x2,y2 if s 0 說明從p到q逆時針旋轉的角度為 0,180 如果相同起點的一堆向量,如果某乙個向量和其他任何向量的叉乘s都 0,則這個向量是逆時針旋轉的起...

計算幾何模板 更新中

今天又切了一題,做題的同時當然也驗證了各種模板 每次都感覺有所改進 view code include include include using namespace std const int maxn 100010 const double eps 1e 8 inline int max int...

模板整合 及時更新 天坑 計算幾何模板

計算幾何模板要寫的內容真多 我寫煩了 先寫這些放上來吧 include include include include include include define maxdbl 1e20 define eps 1e 9 define pi acos 1 using namespace std st...