计算几何的水题 没什么多说的就是要注意精度
今天上博客一看这么多访问 想着还是说说这道题吧
输入底的长度就知道 底边上的两个点A,B了 把A点放在原点利于计算 B点在X轴上 已知高 就知道C点的坐标了 那底角的角度就能求了
底角的一半的正切就是等腰三角形ABC的内切圆的半径和底边一半的比值 底边知道 角度知道 半径就知道了 不明白的自己画个图
然后过内切圆的最上面的一个点做BC的平行线 交CA,CB分别于D,F 三角形CDF与ABC相似 这样求CDF的内切圆半径累加起来 直到R小于0.000001时退出循环就求出结果来了
#include<cstdio>
#include<cmath>
#include<algorithm>
#define eps 0.000001
#define PI acos(-1)
struct Point
{
double x,y;
};
typedef struct Point point;
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
point B,C;
scanf("%lf%lf",&B.x,&C.y);
C.x = B.x/2;
double angle = atan(C.y/C.x)/2;//底角的一半
double sum = 0;
double R = C.x*tan(angle);
while(R >= eps)
{
sum +=2*PI*R;
C.y = C.y-2*R;
C.x = C.y/tan(2*angle);
R = C.x * tan(angle);
}
printf("%13lf\n",sum);
if(N)printf("\n");
}
return 0;
}