题目:给了三个点坐标,求外界圆周长
关键:外接圆的性质:
三角形三边为 a、b、c
半周长 p=(a+b+c)/2三角形面积 S=√[p(p-a)(p-b)(p-c)] (海伦公式)
内切圆半径 r = S/p
=√[(p-a)(p-b)(p-c)/p]
= ½√[(-a+b+c)(a-b+c)(a+b-c)/(a+b+c)]
外接圆半径 R= abc/(4S)
= ¼ abc/√[p(p-a)(p-b)(p-c)]
= abc/√[(a+b+c)(-a+b+c)(a-b+c)(a+b-c)]
#include <cstdio>
#include <string.h>
#include <cstdlib>
#include <cmath>
#include <ctgmath>
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#define pi 3.141592653589793
using namespace std;
double pingfang(double a) {
return a*a;
};
//两点距离
double func1(double a1,double a2,double b1,double b2){
double delta_x = a1-b1;
double delta_y = a2-b2;
double t1=pingfang(delta_x);
double t2=pingfang(delta_y);
return sqrt(t1+t2);
};
int main()
{
double a1,a2,b1,b2,c1,c2;
while (cin>>a1>>a2>>b1>>b2>>c1>>c2) {
//先求出三边的边长
double a,b,c;
a=func1(a1, a2, b1, b2);
b=func1(c1, c2, b1, b2);
c=func1(a1, a2, c1, c2);
//用海伦公式求面积
//先求半周长
double p = (a+b+c)/2;
//求S
double s = sqrt(p*(p-a)*(p-b)*(p-c));
//外接圆半径 R= abc/(4S)
double r = a*b*c / (4*s);
printf("%.2lf\n",2*pi*r);
}
return 0;
}
/*
0.0 -0.5 0.5 0.0 0.0 0.5
0.0 0.0 0.0 1.0 1.0 1.0
5.0 5.0 5.0 7.0 4.0 6.0
0.0 0.0 -1.0 7.0 7.0 7.0
50.0 50.0 50.0 70.0 40.0 60.0
0.0 0.0 10.0 0.0 20.0 1.0
0.0 -500000.0 500000.0 0.0 0.0 500000.0
*/