1 /* 2 * 题目要求:求三角形内接圆面积与外接圆面积之比 3 * 内切圆半径:r=2*s/(a+b+c) ; 4 * 外接圆半径为 R=(a*b*c)/(s*4); 5 * 对于一般的三角形,内切圆半径公式如下: 6 * r=sqrt[(p-a)(p-b)(p-c)/p] 7 * 在直角三角形的内切圆中,有这样两个简便公式: 8 * 1、两直角边相加的和减去斜边后除以2,得数是内切圆的半径。 9 * 2、两直角边乘积除以直角三角形周长,得数是内切圆的半径。 10 * 1、r=(a+b-c)/2(注:s是Rt△的面积,a, b是Rt△的2个直角边,c是斜边) 11 * 2、r=ab/ (a+b+c) 12 */ 13 14 #include <cmath> 15 #include <cstdio> 16 #include <cstdlib> 17 #include <iostream> 18 19 using namespace std; 20 21 const double PI = 3.14159265; 22 23 struct point { 24 double x; 25 double y; 26 double z; 27 }A, B, C; 28 29 double dis(point A, point B) { 30 return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)+(A.z-B.z)*(A.z-B.z)); 31 } 32 33 double solve() { 34 double a = dis(A, B); 35 double b = dis(A, C); 36 double c = dis(B, C); 37 double p = (a + b + c) / 2; 38 double r1 = sqrt((p-a)*(p-b)*(p-c)/p); //外切圆半径 39 double area1 = PI * r1 * r1; 40 double area = sqrt((p-a)*(p-b)*(p-c)*p); 41 double r2 = a * b * c / (area * 4); //内接圆半径 42 double area2 = PI * r2 * r2; 43 return area1 / area2; 44 } 45 46 int main() { 47 while (scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf", &A.x, &A.y, &A.z, &B.x, &B.y, &B.z, &C.x, &C.y, &C.z) != EOF) { 48 double ans = solve(); 49 printf ("%.3lf\n", ans); 50 } 51 return 0; 52 }