• 极角排序


    极角排序

    所谓极角,指的就是以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);

     

  • 相关阅读:
    apk反编译
    mysql 安装解读
    安卓=--确认
    安卓--界面--改变image view
    安卓--返回时,不丢失转态
    安卓--跳转
    安卓--菜单
    安卓--Toast
    设置网页上收藏夹的图标
    分帧标签
  • 原文地址:https://www.cnblogs.com/nublity/p/11619259.html
Copyright © 2020-2023  润新知