直線凸包
表示法:
點用橫縱座標來表示,所以我們定義乙個結構體
而向量可以用乙個點表示,所以就直接當點來用
運算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...