zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Linux 分卷压缩
    用 virtualenv 创建隔离的 Python 运行环境
    Ubuntu 16.04 安装 Python3.6
    Python 的全局变量
    Git 使用总结
    开源的许可证GPL、LGPL、BSD、Apache 2.0
    Python Unofficial Package Site
    apt-get update 更新 ubuntu时出现Hash sum mismatch的原因及解决方法
    Keep It Simple & Stupid
    Python IDLE 增加清屏功能
  • 原文地址:https://www.cnblogs.com/Skyxj/p/3227904.html
Copyright © 2011-2022 走看看