极角排序有四种方法,我一开始就是先算出极角来,然后进行排序,可交上去却是WA,现在还没有搞,后面用另一种还是错了,最后用了这种才过的!
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
const int maxn=55;
struct point
{
double x,y;
} p[maxn];
double cross(point c1,point b1,point c2,point a2)//利用叉乘来判断是不是逆时针
{
return (b1.x-c1.x)*(a2.y-c2.y)-(b1.y-c1.y)*(a2.x-c2.x);
}
bool cmp(point a,point b)
{
point c;
c.x=0;
c.y=0;
return cross(c,b,c,a)<0;
}
int main()
{
int n=0;
while(scanf("%lf %lf",&p[n].x,&p[n].y)!=EOF)
{
++n;
}
sort(p+1,p+n, cmp);
for(int i =0; i<n; i++)
cout<<"("<<p[i].x<<","<<p[i].y<<")"<<endl;
return 0;
}