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

题目链接: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 }

 

转载于:https://www.cnblogs.com/Carered/p/11318281.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值