原文:http://blog.csdn.net/hysfwjr/article/details/8949810
double cross(const point &p1, const point &p2, const point &q1, const point &q2)
{
return (q2.y-q1.y)*(p2.x-p1.x)-(q2.x-q1.x)*(p2.y-p1.y);
}
bool cmp(const point &a, const point &b) //逆时针排序
{
point origin;
origin.x=origin.y=0;
return cross(origin,b,origin,a)<0;
}
bool cmp(const point& p1, const point& p2)
{
return atan2(p1.y, p1.x) < atan2(p2.y, p2.x);
}
bool cmp(const point &a, const point &b) //先按象限排序,再按极角排序,再按远近排序
{
if (a.y==0&&b.y==0&&a.x*b.x<=0)return a.x>b.x;
if (a.y==0&&a.x>=0&&b.y!=0)return true;
if (b.y==0&&b.x>=0&&a.y!=0)return false;
if (b.y*a.y<=0)return a.y>b.y;
point one;
one.y=one.x= 0;
return cross(one,a,one,b)>0||(cross(one,a,one,b)==0&&a.x<b.x);
}
几种极角排序的cmp函数摘录
最新推荐文章于 2021-10-26 23:20:25 发布