1 /*UVA10566 2 平面几何: 3 相似三角形,公式法。 4 但是关键是设变量角度rad,通过分析,可知计算出来的y是一个单调函数,当y恰好等于给定y时,对应的角度就是解题的关键 5 这样,就可以通过二分逼近答案了 6 but,but,but; 7 调试过程中,发现是一个凸函数,故转而用三分解决。 8 but,but,but; 9 答案不对,最终知道,还是二分,为什么像三分呢,因为二分变量的取值范围不对了。(这点是日后要注意的) 10 所以下次尽量保证代数式的范围正确性 11 */ 12 #include<iostream> 13 #include<stdio.h> 14 #include<string.h> 15 #include<algorithm> 16 #include<stdlib.h> 17 #include<cmath> 18 #include<queue> 19 #include<vector> 20 #include<map> 21 #define LL long long 22 23 using namespace std; 24 25 double x,y,c; 26 double F(double rad)//F是单调递减函数 27 { 28 double d,d1,d2,Y; 29 d=x*cos(rad); 30 d2=c/tan(rad); 31 d1=d-d2; 32 Y=d*sqrt(d1*d1+c*c)/d1; 33 return Y-y; 34 } 35 int main() 36 { 37 while(cin>>x>>y>>c) 38 { 39 double L=asin(c/x)+1e-7,R=M_PI/2-L; 40 int t=0; 41 while(t<100) 42 { 43 t++; 44 double m=(R+L)/2; 45 if(F(m)<0) R=m;else L=m; 46 } 47 // for(double i=asin(c/x)+0.001;i<M_PI/2;i=i+0.1) cout<<i<<","<<F(i)<<endl; 48 49 printf("%.3lf ",x*cos(L)); 50 } 51 return 0; 52 }