极角排序

  名词释义:在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对 (ρ,θ)就叫点M的极坐标。可以将平面内的点排成一个环。

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 55
struct Node
{
    int x,y;
};
Node p[MAXN];
int cross(Node p0,Node p1,Node p2)
{
    return (p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x);
}        
bool cmp(Node p1,Node p2)
{
    int tmp=cross(p[0],p1,p2);
    if(tmp>0) return true;
    else return false;
}    

int main()
{
   // freopen("test.in","r",stdin);
    //freopen("test.out","w",stdout);
    int n=0;
    while(scanf("%d%d",&p[n].x,&p[n].y)!=EOF)n++;
    sort(p+1,p+n,cmp);
    for(int i=0;i<n;i++)
      printf("(%d,%d)
",p[i].x,p[i].y);
   // system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/doggod/p/9749492.html