极角排序
极角排序
存储
struct point//存储点
{
double x,y;
};
double cross(double x1,double y1,double x2,double y2) //计算叉积
{
return (x1*y2-x2*y1);
}
double compare(point a,point b,point c)//计算极角
{
return cross((b.x-a.x),(b.y-a.y),(c.x-a.x),(c.y-a.y));
}方法1:利用atan2()函数按极角从小到大排序。
bool cmp1(point a,point b)
{
if(atan2(a.y,a.x)!=atan2(b.y,b.x))
return atan2(a.y,a.x)<atan2(b.y,b.x);
else return a.x<b.x;
}方法2:利用叉积按极角从小到大排序。
Last updated