已三個點座標,判斷能否構成三角形。若能,則求三角形外接圓的圓心和半徑
解:
#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;
}