這裡我們說的極角排序,指的是對於二維座標中的點,當然也可以說是向量。極角排序的用途一般是預處理二維平面中的點,使之變得相對有序,接下來在有序的條件小用o(n)或者o(nlogn)處理,而不是無序條件下的o(n*n)的列舉。
應用鏈結
關於叉積:叉積=0是指兩向量平行(重合);叉積》0,則向量a在向量b的順時針方向(粗略的理解為在a在b的下方);叉積<0,則向量a在向量b的逆時針方向(粗略的理解為在a在b的上方)
如下利用叉積進行極角排序。
1bool
cmp2(point a,point b)
2
如下利用atan2函式計算atan2值利用atan2排序。
函式形式:atan2(y,x)。範圍是[-pi,pi],返回值是此點與遠點連線與x軸正方向的夾角
由於3,4象限的atan2值為負,可以對他們加上乙個2*pi,這樣sort之後,象限就是從第一到第四排序好了。
atan2函式值舉例如下:
0.785398 :atan2(1,1) 一象限
2.35619 :atan2(1,-1)二象限
-2.35619 :atan2(-1,-1)三象限
-0.785398 :atan2(-1,1)四象限
int cnt=0;for(int j=0;j)
sort(p,p+cnt);
for(int j=0;j2*pi;//
這行**可選,是為了把前後的向量合起來,如果需要比較向量的相鄰關係
兩種方法的比較:用叉積精度更高,但是時間花銷大;tan2精度稍微低一些,時間快。記得有個題用叉積排序結果tle了,當然有些題用tan2可能會wa!!!
極角排序詳解
極角排序詳解 名詞釋義 在平面內取乙個定點o,叫極點,引一條射線ox,叫做極軸,再選定乙個長度單位和角度的正方向 通常取逆時針方向 對於平面內任何一點m,用 表示線段om的長度 有時也用r表示 表示從ox到om的角度,叫做點m的極徑,叫做點m的極角,有序數對 就叫點m的極座標 四種極角排序 詳解 s...
極角排序 凸包
我的心願是世界和平!方便而且好理解,建議使用。以p 0 為原點。int cmp point a,point b sort p 1,p m,cmp 以p 0 為原點。int cmp point a,point b sort p 1,p m,cmp 以 0,0 為原點。int quadrant poin...
計算幾何 極角排序
amphiphilic carbon molecules 儲存個極角排序的板子。極角排序有兩種。一種是atan2,速度快,但是有精度誤差。另一種是叉積,速度慢但是只用進行整數運算。注意用叉積極角排序的時候,要把上半區和下半區分開來排,而且每個點所在的半區要唯一。struct point intget...