小蒟蒻的計算幾何學習初步

2021-09-11 20:15:19 字數 2803 閱讀 9712

直線凸包

表示法:

點用橫縱座標來表示,所以我們定義乙個結構體

而向量可以用乙個點表示,所以就直接當點來用

struct point ;}

;typedef point vector;

運算

四則運算

最簡單的普通的加減乘除運算高中和初中物理都學過,這裡就不做多的解釋了

vector operator

+(vector a,vector b)

//向量+向量=向量

vector operator

-(point a,point b)

//點-點=向量

vector operator

*(vector a,

double x)

//向量*乙個數=向量

vector operator

/(vector a,

double x)

//向量/乙個數=向量

點積

點積也是高中學的向量的數量級,這一部分有很公式,可以用於求兩個向量夾角的大小(參見數學必修四課本)

求點積也用的是書中最樸素的演算法

double

operator

*(vector a,vector b)

//點積

double

len(vector a)

//向量的長度等於sqrt(a,a)

double

jiao

(vector a,vector b)

//向量的夾角等於acos(a·b/|a|/|b|)

其正負是由夾角的大小決定的

點積滿**換律

a ⃗⋅

b⃗=b

⃗⋅a⃗

\vec a \cdot \vec b = \vec b \cdot \vec a

a⋅b=b⋅

a叉積叉積通常用於求多邊形面積以及判斷兩個向量的位置關係

double

operator

^(vector a,vector b)

//叉積

double

s(vector a,vector b)

//面積是兩個向量叉積的二分之一

叉積的正負是由兩個向量的位置關係決定的。

叉積不滿**換律

a ⃗⋅

b⃗=−

b⃗⋅a

⃗\vec a \cdot \vec b = - \vec b \cdot \vec a

a⋅b=−b

⋅a旋轉將向量a旋轉rad度

vector rotate

(vector a,

double rad)

由兩點確定一條直線,所以我們用兩個點表示直線

struct line 

line

(point a,point b):a

(a),

b(b)

/* atan2是乙個函式,在c語言裡返回的是指方位角,也可以理解為計算複數 x+yi 的輻角

計算時atan2 比 atan 穩定。

*/};bool

operator

<

(line a,line b)

//向量左側求交,所以極角相同時靠左的更優,把優的放在後面,方便之後的操作

求交點:

point inter (line a,line b)

學習過斜率優化的童鞋們應該對凸包都不陌生,這裡就不做詳細的介紹了

手動上** p2742 【模板】二維凸包

#include

#include

#include

#include

using

namespace std;

const

int n=

100010

;const

double eps=

1e-8

;struct vector ;}

;#define point vector

vector operator

+(vector a,vector b)

vector operator

-(vector a,vector b)

vector operator

*(vector a,

double k)

vector operator

/(vector a,

double k)

double

operator

*(vector a,vector b)

double

operator

^(vector a,vector b)

vector d[n]

,hull[n]

;bool

operator

<

(point a,point b)

int n,m;

double

len(vector a)

void

get_hull()

int k=m;

for(

int i=n-

1;i>=1;

--i)

}int

main()

更多的內容可以手動跳轉一下–>凸包入門題目

計算幾何學習筆記

基礎部分 include using namespace std define type double define vector point define eps 1e 8 const double pi 3.14159265358979323 type deg2red type deg type...

計算幾何學習筆記

計算幾何是什麼東西?能吃嗎?給定 n 個點 x i,yi 問 歐幾里得 距離最近的點對。如果用樸素的兩兩枚舉,需要o n2 的時間。考慮用分治法,先將點按照先 x 後 y排序。考慮對一段點 l r 的處理。在 放一根平行於y軸的線,其左邊的答案為a,右邊為b,設 min a,b 考慮如果有跨這條線的...

計算幾何(學習)模板

點結構 struct point 浮點誤差處理 int dblcmp double x 或者int dblcmp double x 判斷線段是否相交並求交點 規範相交 double det double x1,double y1,double x2,double y2 double cross po...