極角排序常用方法

2022-03-20 15:05:10 字數 875 閱讀 1215

寫在前面:儲存點的結構體和函式

1

struct 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()函式按極角從小到大排序。

1

bool

cmp1(point a,point b)

2

方法2:利用叉積按極角從小到大排序。

叉積=0是指兩向量平行(重合);叉積》0,則向量a在向量b的順時針方向(可以理解為在a在b的下方);叉積<0,則向量a在向量b的逆時針方向(可以理解為在a在b的上方)。

1

bool

cmp2(point a,point b)

2

方法3:先按象限從小到大排序 再按極角從小到大排序

1

int 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...