極角は、それらのものを並べ替えます

あなたは、回転方向に応じてアクセスするためにはいくつかの点で極角をソートしたい場合には

もちろん、さまざまなトピックを達成するためには、さまざまな要件に応じて注文します

しかし、ここでそれを書くためにいくつかの一般的なヒントがあります

私は(抜粋の一部であるクロス積ので少し厄介私を許してこの実験のコードを見て

1の#include <ビット/ STDC ++ H>
 2  の#define X第
 3  の#define Yの第
 4  の#define N 100005
 5  使って 名前空間STDを、
6  INT N。
7対< 二重二重 > P [N]。
8  BOOL CMP(対< 二重二重 > A、対< 二重二重 > B){
 9      であれば(ATAN2(Ayの、AX)!= ATAN2(により、Bxの))
 10          リターン ATAN2(Ayの、AX)<ATAN2(により、Bxの);
11の     他の リターン ABS(アックス)< ABS(Bxの);
12  }
 13の // ************************* 
14の ダブルクロス(ダブル X1、ダブル Y1、ダブル X2、ダブルY2)
 15  {
 16      リターン(X1 * Y2-X2の*のY1)。
17  }
 18  二重比較(対< 二重二重 > A、対< 二重二重 > B、対< 二重二重 > C)//¼ÆË㼫½Ç 
19  {
 20の     リターン((バイAY)(BX-AX)、(CX-AX)、(CY-クロスAY))。
21  }
 22  ブール CMP2(対< 二重二重 > A、対< 二重二重 > B) 
 23  {
 24      対< 二重二重 > C。// Ôμã 
25      CX = 0 26      CY = 0 27      場合((C、B)==コンペア0//¼ÆËã²æ»Ý£¬º¯ÊýÔÚÉÏÃæÓнéÉÜ£¬Èç¹û²æýÏàμÈ£¬°'ÕÕX'ÓСμ½'óÅÅÐò» 
28          リターン斧< BX。
29      他の リターン比較(C、B)> 0 30  }
 31  // ************************* 
32  INT メイン(){
 33      のscanf(" %d個"、&N)
34      のためにint型 i = 1 ; iが<= N; iが++ ){
 35          のscanf(" %のLFの%のLF "、&​​P [i]は.X、&P [i]の.Y)。
36      }
 37      ソート(のp +1、P + 1 + nは、CMP); // CMP2
 38      はcout << " ここにあなたがいる" << てendl;
39      のためにint型 i = 1 ; iが<= N; iが++ 40      COUT << P [i]は.X << "  " << P [i]は.Y << ENDL。
41  }
 42  / * 
43  12
 44  99 -7
 45  1 0
 46  3 2
 47  6 4
 48  0 7
 49  0 -22
 50  -9 20
 51  0 0
 52  -100 1
 53 -2 0
 54  -1 0
 55  -4 -4
 56  * / 
57  / * 
58  7
 59  6 4
 60  0 7
 61  0 0
 62  1 0
 63  3 2
 64  * /

 

最初は、atan2関数

このことは彼をyポイント与えるが、xが、yがああ、彼はアークに戻ります、に注意を払うことで、この点がこの順番でなければなりません塊を排水:

第三象限、y軸負車軸、第4象限、原点、X軸正軸、第一象限、負のy軸正車軸ハーフシャフト、第二象限は、x軸

すべてのポイントを行にはまだ非常に非常に簡単です速いが、欠点があることである精度が失われている、があるかもしれWA

 

また、使用することができます外積を

Nishunクロス非常に良好な使用に関連する天然の正および負の特性の製品だけでなく、非常に良い精度

唯一の問題は、排出点があればある2つの以上の象限は非常に退屈することがありますされているかわからない、何行

その上にのみ第二位ことができます

バーが設定しても点の第1のセットは、シーケンスが異なる読み出しに応じて異なるであろう。

 

どちらの方法にも長所と短所があり、必要に応じてそれを選択してください

おすすめ

転載: www.cnblogs.com/2017SSY/p/11082770.html