あなたは、回転方向に応じてアクセスするためにはいくつかの点で極角をソートしたい場合には
もちろん、さまざまなトピックを達成するためには、さまざまな要件に応じて注文します
しかし、ここでそれを書くためにいくつかの一般的なヒントがあります
私は(抜粋の一部であるクロス積ので少し厄介私を許してこの実験のコードを見て
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のセットは、シーケンスが異なる読み出しに応じて異なるであろう。。。
どちらの方法にも長所と短所があり、必要に応じてそれを選択してください