1. 程式人生 > >已三個點座標,判斷能否構成三角形。若能,則求三角形外接圓的圓心和半徑

已三個點座標,判斷能否構成三角形。若能,則求三角形外接圓的圓心和半徑

解:

#include<stdio.h>

#include<math.h>

int main()

{

       double  x1,x2,x3,y1,y2,y3,p1,p2,q1,q2,k1,k2,x,y,r,a,b,c,d;

       int  i,j,k,l;

       while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF)

       {

              a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));//求三條線段的長度

              b=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));

              c=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));

       if((a+b)>c&&(a+c)>b&&(b+c)>a)//判斷是否可以構成三角形

                     printf("yes\n");

              else

              {

                     printf("no\n");

                     continue;

              }

              p1=(x1+x2)/2;//計算兩邊中點

              q1=(y1+y2)/2;

              p2=(x1+x3)/2;

              q2=(y1+y3)/2;

              k1=(y1-y2)/(x1-x2);//計算兩邊的斜率

              k2=(y1-y3)/(x1-x3);

              y=(p1-p2+k1*q1-k2*q2)/(k1-k2);//利用垂徑定理列方程組可以解的圓心座標

              x=p1-k1*(y-q1);

              r=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));//由兩點間距離公式可得半徑

              printf("%lf%lf %lf\n",x,y,r);

       }

return 0;

}