• poj 2007 Scrambled Polygon 极角排序


     1 /**
     2 极角排序输出,,,
     3 主要atan2(y,x) 容易失精度,,用
     4 bool cmp(point a,point b){
     5     if(cross(a-tmp,b-tmp)>0)
     6         return 1;
     7     if(cross(a-tmp,b-tmp)==0)
     8         return length(a-tmp)<length(b-tmp);
     9     return 0;
    10 }
    11 **/
    12 #include <iostream>
    13 #include <algorithm>
    14 #include <cmath>
    15 using namespace std;
    16 
    17 struct point {
    18     double x,y;
    19     point (double x=0,double y=0):x(x),y(y){}
    20 };
    21 point p[100];
    22 point tmp;
    23 typedef point Vector;
    24 Vector operator - (point a,point b){
    25     return Vector (a.x-b.x,a.y-b.y);
    26 }
    27 double angle(Vector v){
    28     return atan2(v.y,v.x);
    29 }
    30 double length(Vector v){
    31     return sqrt(v.x*v.x+v.y*v.y);
    32 }
    33 
    34 double cross(Vector a,Vector b){
    35     return a.x*b.y-a.y*b.x;
    36 }
    37 bool cmp(point a,point b){
    38     if(cross(a-tmp,b-tmp)>0)
    39         return 1;
    40     if(cross(a-tmp,b-tmp)==0)
    41         return length(a-tmp)<length(b-tmp);
    42     return 0;
    43 }
    44 
    45 int main()
    46 {
    47     int cnt =0;
    48     double x1,y1;
    49     cin>>tmp.x>>tmp.y;
    50     while(cin>>x1>>y1){
    51         p[cnt].x = x1;
    52         p[cnt].y = y1;
    53         cnt++;
    54     }
    55     sort(p,p+cnt,cmp);
    56     cout<<"("<<tmp.x<<","<<tmp.y<<")"<<endl;
    57     for(int i=0;i<cnt;i++)
    58         cout<<"("<<p[i].x<<","<<p[i].y<<")"<<endl;
    59     return 0;
    60 }
  • 相关阅读:
    System.TypeInitializationException
    Leetcode 884. 两句话中的不常见单词
    Leetcode 5274. 停在原地的方案数
    Leetcode 1254. 统计封闭岛屿的数目
    Leetcode 1262. 可被三整除的最大和
    数据库知识点自我补充
    最大公共连续子序列
    重建二叉树
    KMP算法
    BF算法(模式匹配)
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3724200.html
Copyright © 2020-2023  润新知