极角排序

Posted nublity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极角排序相关的知识,希望对你有一定的参考价值。

极角排序

所谓极角,指的就是以x轴正半轴为始边,逆时针转过的角,这个角的范围是[0,2π][0,2π]。

利用atan2函数

atan2(y,x),表示(x,y)这个点与原点连线,这条线与x轴正半轴的夹角,这里的这个极角的范围是[π,π][−π,π]的,一二象限为正,三四象限为负。所以我们从小到大排完序后,实际上是第三象限→第四象限→第一象限→第二象限。

 struct node 
    int x, y;
    double angle;

    bool operator<(const node &a) const 
        return angle < a.angle;
    
  s[N];

 int n;
 cin >> n;
 for (int i = 1; i <= n; i++) 
     cin >> s[i].x >> s[i].y
s[i].angle
= atan2(s[i].y, s[i].x); sort(s + 1, s + 1 + n);

叉积

已知两点坐标,通过叉积可以求得与原点所围成的三角形的有向面积。

(a.x*b.ya.y*b.x)/2 即为该三角形面积,如果这个值是正的,说明b位于a的正方向,即逆时针方向(当然,这个角度小于π),反之,如果这个面积是负的,说明b位于a的负方向,即顺时针方向。

    struct node 
        int x, y;
     s[N];
bool cmp(node a,node b) return a.x*b.y>b.x*a.y;
int n; cin >> n; for (int i = 1; i <= n; i++) cin >> s[i].x >> s[i].y; sort(s + 1, s + 1 + n,cmp);

 

 

以上是关于极角排序的主要内容,如果未能解决你的问题,请参考以下文章

极角排序

极角排序

极角排序

poj2007(极角排序)

极角排序常用方法

Scrambled Polygon POJ - 2007(极角排序)