您的位置:首页 > 其它

UVa 375 - Inscribed Circles and Isosceles Triangles

2014-04-30 14:24 369 查看
传送门UVa 375 - Inscribed Circles and Isosceles Triangles

题意是给出一个等腰三角形的底B和高H,从低不断向上摞内接圆,要求最下面的内接圆必须与底和两腰相切,其他的圆必须与它下面的圆和两腰相切,直到达到所要求的精度,求出所有的圆的周长之和



连结圆心和三角形的顶点, 由三个三角形和大的三角形面积相等可以推出

r = 2S / (a + b + c)

之后再根据相似三角形可以得出每次的 r = r * k,

k = (1 - 2 * r / h)

详情见代码

#include <cstdio>
#include <cmath>
using namespace std;

const double pi = atan(1) * 4;

int main()
{
//freopen("input.txt", "r", stdin);
int T;
register double B, H, r, l, sum;
scanf("%d", &T);
while (T--)
{
sum = 0;
scanf("%lf%lf", &B, &H);
l = sqrt(B * B / 4 + H * H);
r = (B * H) / (2 * l + B);
const double k = 1 - 2 * r / H;
while (r >= 1e-6)
{
sum += r;
r *= k;
}
printf("%13.6f\n", 2 * pi * sum);
if (T)
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM UVa