Description
When a thin rod is mounted on two solid walls and then heated, it expands and takes the shape of a circular segment, the original rod being the chord of the segment.
Your task is to compute the distance by which the center of the rod is displaced.
Input
Output
Sample Input
1000 100 0.0001 15000 10 0.00006 10 0 0.001 -1 -1 -1
Sample Output
61.329 225.020 0.000
一根木棒根據溫度變化,長短隨着變化L'=(1+n*C)*L。 給出原長,溫度變化和變化的係數C,求偏離原來的水平線多少。
直接推出偏離量不好求,通過幾何找出r爲中間變量,然後列出等式。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double LL,c,degrees;
while(~scanf("%lf%lf%lf",&LL,°rees,&c))
{
if(LL==-1 && c==-1 && degrees==-1)
break;
if(LL==0 || c==0 || degrees==0)//有一個爲0得數爲0;
{
printf("0.000\n");
continue;
}
double l=(1+c*degrees)*LL;//l爲伸長後的量;
double max=acos(0.0);//選90°爲最大度數
double min=0.0,mid=0.0;
while(max-min>1e-12)
{
mid=(max+min)/2;
LL/(2*sin(mid))<l/(2*mid)?min=mid:max=mid;//由2*r*mid=l以及2*r*sin(mid)=LL 得;
}
printf("%.3lf\n",LL/(2*sin(mid))*(1-cos(mid)));//幾何求解
}
return 0;
}