HDU 5060/BC 12C War
2015-08-10 16:00
218 查看
题目大意 给出一个以原点为中心的球的半径 和一个以原点为中心的圆柱的半径和高 求他们相交体积与总体积的比
总体积 是由球体积加圆柱体积减相交体积得到。
接下来说相交体积怎么求。
首先基础的几何 球体积是4/3πR³ 圆柱是πR²H
另外补充 球被平面切后形成的较小的部分叫球冠(自己定的义,并不严谨,只是方便大家理解) 球冠是有体积公式的π π(3R-h)×h²/3
你不知道公式也不要紧 可以积分手推一下 不会手推也不要紧 可以用simpson什么的积分函数帮你算 只要你能把原函数推出来就还可以玩
什么你还不会?那也没关系 去做D吧 C跟你无缘了。。。
言归正传 各部分的体积能求了 下面开始分情况讨论 分割成以上3种标准模型
当圆柱半径比球大时 很明显 相交体积就是球被切了之后剩下的 等于球-球冠 (圆柱高于求直径就不用减了)
圆柱半径比球小时 有点麻烦 圆柱很高时 即HZ>=R时 就是 圆柱 加个球冠 形状跟个矿泉水瓶子差不多(为我能想到一个正常的模型鼓掌)
而这时矿泉水瓶子中圆柱的高度是h=sqrt(R²-HR²) (画个剖面图 R HR 和h构成三角形 很好推出的 我就不画图了 懒~) 而球冠部分的高是R-h
而当圆柱高度 比刚刚推出的h小时 相交部分即圆柱
而当圆柱高度位于h和R直接是 形状是矿泉水瓶把盖子消去 体积是 圆柱加大球冠减小球冠
为了计算方便 我直接算的一半的体积 因为怕出精度问题 提前把π都约了
总体积 是由球体积加圆柱体积减相交体积得到。
接下来说相交体积怎么求。
首先基础的几何 球体积是4/3πR³ 圆柱是πR²H
另外补充 球被平面切后形成的较小的部分叫球冠(自己定的义,并不严谨,只是方便大家理解) 球冠是有体积公式的π π(3R-h)×h²/3
你不知道公式也不要紧 可以积分手推一下 不会手推也不要紧 可以用simpson什么的积分函数帮你算 只要你能把原函数推出来就还可以玩
什么你还不会?那也没关系 去做D吧 C跟你无缘了。。。
言归正传 各部分的体积能求了 下面开始分情况讨论 分割成以上3种标准模型
当圆柱半径比球大时 很明显 相交体积就是球被切了之后剩下的 等于球-球冠 (圆柱高于求直径就不用减了)
圆柱半径比球小时 有点麻烦 圆柱很高时 即HZ>=R时 就是 圆柱 加个球冠 形状跟个矿泉水瓶子差不多(为我能想到一个正常的模型鼓掌)
而这时矿泉水瓶子中圆柱的高度是h=sqrt(R²-HR²) (画个剖面图 R HR 和h构成三角形 很好推出的 我就不画图了 懒~) 而球冠部分的高是R-h
而当圆柱高度 比刚刚推出的h小时 相交部分即圆柱
而当圆柱高度位于h和R直接是 形状是矿泉水瓶把盖子消去 体积是 圆柱加大球冠减小球冠
为了计算方便 我直接算的一半的体积 因为怕出精度问题 提前把π都约了
include <iostream> #include <cstring> #include <string> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <map> #include<set> #include<stack> #define bug puts("bugbugbug"); using namespace std; const double pai=acos(-1.0); typedef long long ll; double yuanguan(double r,double h) { return (3*r-h)*h*h/3; } double yuanzhu(double r,double h) { return r*r*h; } int main() { double R,HR,HZ; while(~scanf("%lf%lf%lf",&R,&HR,&HZ)) { double sum=(2*R*R*R/3+HZ*HR*HR); double ans;//chong he de bu fen if(HR<R) { double h=sqrt(R*R-HR*HR); if(HZ>R) ans=yuanzhu(HR,h)+yuanguan(R,R-h); else if(HZ<h) ans=yuanzhu(HR,HZ); else ans=yuanzhu(HR,h)+yuanguan(R,R-h)-yuanguan(R,R-HZ); } else { ans=2*R*R*R/3; if(HZ<R) ans-=yuanguan(R,R-HZ); } double lalala=ans/(sum-ans); printf("%.6lf\n",lalala); } }
相关文章推荐
- Android中设置TextView的颜色setTextColor
- Android中Services简析
- springmvc学习第二天
- hibernate.hbm2ddl.auto配置详解
- 后台弹出JS类
- Sequence contains no matching element
- Repeater
- Android中设置TextView的颜色setTextColor
- 通过VFL语法添加约束
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-01-CNN基础知识点
- Linux - crontab的创建以及注意事项
- CF Clique in the Divisibility Graph (DP)
- 欢迎使用CSDN-markdown编辑器
- SDUT 1500 Message Flood (快排+二分查找)
- Linux - crontab的创建以及注意事项
- 被碎片化的时间
- svn使用教程
- UTF-8编码导致JS输出中文乱码
- 【MongoDB数据库】Java MongoDB CRUD Example
- JavaScript可否多线程? 深入理解JavaScript定时机制