poj 1905 Expanding Rods

#include <iostream>        //二分查找
#include <math.h>
using namespace std;
#define precisions 1e-5
int main()
{
double l,n,c,a;
double begin,end,mid,r,angle;
while(cin>>l>>n>>c&&l>=0)
{
a
=l/2;
begin
=0;end=a;
l
=(1.0+n*c)*l;
while(end-begin>precisions)
{
mid
=(end+begin)/2;
r
=(a*a+mid*mid)/(2*mid);
angle
=asin(a/r);
if(r*angle>(l/2))
end
=mid;
else
begin
=mid;
}
printf(
"%0.3f\n",mid);
}
return 0;
}


//题目的意思就是求圆弧的中点到所对应的弦的距离,
//设该距离为x,弦长为L,弧长为L1,所对应的圆的半径为r,弧长L1所对应的圆心角的弧度的一半为a,
//则有勾股定理有:(L/2)^2+(r-x)^2=r^2,化简整理得:r=[x^2+(L/2)^2]/(2*x),
//又有sin(a)=L/(2*r),即a=arcsin(L/2r),
//则有弧长公式有弧长的一半为:ra=[x^2+(L/2)^2]/(2*x)*asin(L/2r),将其与L/2进行比对运用二分法求解.

  

posted on 2011-07-22 14:54  sysu_mjc  阅读(113)  评论(0编辑  收藏  举报

导航