基礎部分
#include using namespace std;
#define type double
#define vector point
#define eps 1e-8
const double pi = 3.14159265358979323;
type deg2red(type deg)
type rad2deg(type rad)
inline type abs(type x)
//二維點/二維向量
struct point
point(type x,type y):x(x),y(y)
point operator-(point other)
};//向量點積
type dot(vector a,vector b)
//向量叉積
type cross(vector a,vector b)
//向量長度
double length(vector a)
//兩向量夾角
type angle(vector a,vector b)
多邊形
//多邊形面積(點必須按順時針或逆時針順序給出)
type area(point* pts,int sz)
if(r-l==3)
int mid = (l+r)>>1;
type minl=nearest(pts,l,mid);
type minr=nearest(pts,mid,r);
type re = min(minl,minr);
int cnt=0;
int pos;
//tmp暫存分割線附近的點
pos=mid-1;
while(1)else
}pos=mid;
while(1)
}return re;
}
計算幾何學習筆記
計算幾何是什麼東西?能吃嗎?給定 n 個點 x i,yi 問 歐幾里得 距離最近的點對。如果用樸素的兩兩枚舉,需要o n2 的時間。考慮用分治法,先將點按照先 x 後 y排序。考慮對一段點 l r 的處理。在 放一根平行於y軸的線,其左邊的答案為a,右邊為b,設 min a,b 考慮如果有跨這條線的...
計算幾何學習筆記
計算幾何基本採用向量來表示點 線 麵等基本元素,而非我們平時常用的解析式。向量的基礎運算法則 給定兩個向量 p x 1,y 1 q x 2,y 2 加法 p q x 1 x 2,y 1 y 2 減法 p q x 1 x 2,y 1 y 2 數乘 lambda p lambda x 1,lambda ...
計算幾何學習筆記
這部分沒啥好講的。點可以使用座標表示,向量可以使用點表示。這裡記錄一些我知道的基礎知識。對於向量 a x,y 其長度記為 a sqrt 對於兩個向量 a x 1,y 1 b x 2,y 2 他們的叉積是 a times b x 1 cdot y 2 x 2 cdot y 1 叉積的絕對值還等於以這兩...