极角排序

极角排序:

      给定一个原点(x_{0},y_{0})\small (x_{0},y_{0}),  然后其余的点就是要排序的点,排序的规则,就是与这个原点的 正方向的夹角,按照这个结果进行排序。

 

步骤:

1. 遍历所有点找到 \small x_{min},y_{min}, 将原点记做\small (x_{min},y_{min})\small (x_{min},y_{min})\small w

2.定义比较函数 int cmp(Point a,Point b)

 

比较函数:

1.按照斜率排序,如果斜率相同,按照x大小进行排序

//从下面往上面
bool cmp(Point a,Point b){
    vector v1=a-w,v2=b-w;//需要先转换成向量
    double t1=atan2(v1.y,v1.x),t2=atan2(v2.y,v2.x);
    if(t1!=t2)
        return t1<t2;
    return a.x<b.x;
}

2.按照差积排序,\small a\times b =\left | a \right |*\left | b \right |*sin\Theta

//从下面往上面
bool cmp(Point a,Point b){
    Vector v1=a-w,v2=b-w;
    if(cross(v1,v2)!=0)
        return cross(v1,v2)>0;
    return a.x<b.x;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值