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 }

 

版权声明:本文为try86原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/try86/archive/2012/04/25/2470620.html