计算几何——求圆台内切球体积最大值

题目链接:http://codeforces.com/gym/100796/problem/I

思路:利用球体和圆台斜边相切,在正视图中 判断球与梯形腰是否相切可进行二分搜索。

AC代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const double eps = 1e-8;
 4 bool check(double h,double r, double R,double m)
 5 {
 6     double af = atan(h/(R-r));
 7     double bt = atan(m/R);
 8     double gm = af - bt;
 9     double ans = sqrt(m*m+R*R) * sin(gm);
10     return ans - m >= eps;
11 }
12 int main()
13 {
14     double R,r,h;
15     scanf("%lf %lf %lf",&r,&R,&h);
16     double ll = 0, rr = h / 2.0;
17     while(rr - ll >= eps)
18     {
19         double mid = (ll + rr)/2;
20         if(check(h,r,R,mid)) ll = mid;
21         else rr = mid;
22     }
23     printf("%.12f",ll);
24     return 0;
25 }

猜你喜欢

转载自www.cnblogs.com/Carered/p/11318281.html