寫在前面:儲存點的結構體和函式
1struct point//
儲存點2;5
6double cross(double x1,double y1,double x2,double y2) //
計算叉積710
11double compare(point a,point b,point c)//
計算極角
12
方法1:利用atan2()函式按極角從小到大排序。
1bool
cmp1(point a,point b)
2
方法2:利用叉積按極角從小到大排序。
叉積=0是指兩向量平行(重合);叉積》0,則向量a在向量b的順時針方向(可以理解為在a在b的下方);叉積<0,則向量a在向量b的逆時針方向(可以理解為在a在b的上方)。
1bool
cmp2(point a,point b)
2
方法3:先按象限從小到大排序 再按極角從小到大排序
1int quadrant(point a) //
象限排序,注意包含四個座標軸28
910bool c***(point a,point b) //
先按象限從小到大排序 再按極角從小到大排序
11
三種方法比較:
第三種方法按象限從小到大排序 再按極角從小到大排序是在有特殊需求的時候才會用到。
第一種方法,利用atan2排序,和利用叉積排序的主要區別在精度和時間上。
精度: atan2精度不如叉積高。
參考部落格:
極角排序詳解
極角排序詳解 名詞釋義 在平面內取乙個定點o,叫極點,引一條射線ox,叫做極軸,再選定乙個長度單位和角度的正方向 通常取逆時針方向 對於平面內任何一點m,用 表示線段om的長度 有時也用r表示 表示從ox到om的角度,叫做點m的極徑,叫做點m的極角,有序數對 就叫點m的極座標 四種極角排序 詳解 s...
極角排序理解
這裡我們說的極角排序,指的是對於二維座標中的點,當然也可以說是向量。極角排序的用途一般是預處理二維平面中的點,使之變得相對有序,接下來在有序的條件小用o n 或者o nlogn 處理,而不是無序條件下的o n n 的列舉。應用鏈結 關於叉積 叉積 0是指兩向量平行 重合 叉積 0,則向量a在向量b的...
5種極角排序的方法
全部 include using namespace std typedef long long ll const int n 10005 const int inf 0x3f3f3f3f const double eps 1e 8 const int mod 1e9 7 bool dy doubl...