【转载出处】
http://blog.csdn.net/frankiller/article/details/7729784
【解题思路】
求等腰三角形的内切圆周长,内切圆不止一个,切完一个继续内切直到r<=0.000001;
设初始的内切圆半径为R;
勾股定理 斜边L=sqrt(R*R+B*B\4);
接下来求R有2种方法:
1继续用勾股定理:(L-B/2)^2+R^2=(H-R)^2 R=sqrt(H*H+B*B/4); R=R-B/2; R=(R*R-H*H)/(-2*H);
2.面积法:R*L+R*B/2=B*H/2; R =B*H/(2*L+B);
【代码】
#include<stdio.h>
#include<math.h>
#define pi asin(1.0)*2
void main() {
double B,H,r,h,R;
int t;
scanf("%d",&t);
while (t--) {
scanf("%lf%lf",&B,&H);
R = sqrt(H*H+B*B/4);
R = B*H/(2*R+B);
h=H; r=R;
while (r >= 0.000001) {
h = h-2*r;
r = R*h/H;
}
printf("%13lf\n",(H-h)*pi);
if (t)
printf("\n");
}
}