• HDU1791三点确定一个圆


     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <cstdlib>
     6 #include <algorithm>
     7 #include <vector>
     8 #include <stack>
     9 #include <queue>
    10 #include <cassert>
    11 #include <set>
    12 #include <sstream>
    13 #include <map>
    14 using namespace std ;
    15 #ifdef DeBUG
    16 #define bug assert
    17 #else
    18 #define bug //
    19 #endif
    20 #define zero {0}
    21 #define INF 2000000000
    22 #define EPS 1e-10
    23 inline int sgn(double x)//sgn函数符号判断 ,小于给定精度判零
    24 {
    25     return fabs(x) < EPS ? 0 :(x < 0 ? -1 : 1);
    26 }
    27 struct POINT
    28 {
    29     double x;
    30     double y;
    31     POINT()
    32     {
    33     }
    34     POINT(double a,double b):x(a),y(b)
    35     {
    36     }
    37 };
    38 double dist(POINT p,POINT r)
    39 {
    40     return sqrt((p.x-r.x)*(p.x-r.x)+(p.y-r.y)*(p.y-r.y));
    41 }
    42 bool cocircle(POINT p1,POINT p2,POINT p3,POINT &q,double &r)
    43 {
    44     double x12=p2.x-p1.x;
    45     double y12=p2.y-p1.y;
    46     double x13=p3.x-p1.x;
    47     double y13=p3.y-p1.y;
    48     double z2=x12*(p1.x+p2.x)+y12*(p1.y+p2.y);
    49     double z3=x13*(p1.x+p3.x)+y13*(p1.y+p3.y);
    50     double d=2.0*(x12*(p3.y-p2.y)-y12*(p3.x-p2.x));
    51     if(abs(d)<EPS)                           //共线,圆不存在
    52         return false;
    53     q.x=(y13*z2-y12*z3)/d;
    54     q.y=(x12*z3-x13*z2)/d;
    55     r=dist(p1,q);
    56     return true;
    57 }
    58 int main()
    59 {
    60 #ifdef DeBUGn
    61 
    62     freopen("C:\Users\Sky\Desktop\1.in","r",stdin);
    63 #endif
    64     int T;
    65     double x1,x2,x3,y1,y2,y3;
    66     scanf("%d",&T);
    67     while(T--)
    68     {
    69         POINT xin;
    70         double r;
    71         cin>>x1>>y1>>x2>>y2>>x3>>y3;
    72  /*
    73        if(sgn((x3-x1)*(y2-y1)-(y3-y1)*(x2-x1))==0)
    74             printf("No this position
    ");
    75         else
    76         {*/
    77             if(cocircle(POINT(x1,y1),POINT(x2,y2),POINT(x3,y3),xin,r))
    78             printf("%.1lf %.1lf
    ",xin.x,xin.y);
    79             else if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3))//知道数据了这里偷个懒呵呵,应判断两点中点 
    80             printf("%.1lf %.1lf
    ",(x1+x2+x3)/2,(y1+y2+y3)/2);
    81             else
    82             printf("No this position
    ");
    83         //}
    84     }
    85     return 0;
    86 }
    View Code
  • 相关阅读:
    安装wampserver2时出现的问题
    微信相关信息
    YII CDbCriteria总结
    discuz@功能的代码
    音乐搜索并生成播放功能
    php生成json和js解析json
    Discuz!提取文章标签
    ⑦ vue项目结构study
    ⑤ elementui 使用字符填充table空白表格项
    ④ keep-alive缓存组件,操作之后需要重新获取数据--activated
  • 原文地址:https://www.cnblogs.com/Skyxj/p/3227904.html
Copyright © 2020-2023  润新知