赞
踩
大体题意:
求图中交叉圆柱体的体积!
思路:
真是充分反映了高数能力! 是真弱啊,,想了6,7个小时了,才想明白! = =T_T!!!!
大体思路很明确,把两个圆柱的体积加起来 减去中间公共部分的即可!
第一步首先得想到公共部分是一个怎样的图形。
这个在高数下册例题中有讲到!
中间实线部分就是第一卦限内的图形,显然一个二重积分就可以搞定:
这种情况比较简单点,适合于2*R <= h 的时候!
如果2*R > h话!
需要加点想象力,中间公共部分 是一个长方体 加上两个小突起
也是把他分成8份,只算第一卦限内的。
把他放到坐标系里 与上一个图相比,没什么变换 只是将上一个图沿x轴平移了h/2 个单位,而0~h/2这片区域是一个长方体!
这样只需改变积分上下限即可!公式不变!(这里想了很久)
详细见代码:
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<cmath>
- using namespace std;
- const double eps = 1e-8;
- const double pi = acos(-1.0);
- int main(){
- double r,h;
- while(scanf("%lf %lf",&r,&h) == 2){
- if (2*r > h + eps){
- double a = sqrt(r*r-h*h/4);
- // printf("%lf\n",a);
- double V = 2*pi*r*r*h;
- double other = h*h*a/4 + r*r*r*2/3 + (a)*(a)*(a)/3 - r*r*a;
- double ans = V-8.0*other;
- printf("%.4lf\n",ans+eps);
-
- }else{
- double V = 2*pi*r*r*h;
- double other = 8*2*r*r*r/3;
- double ans = V-other;
- printf("%.4lf\n",ans+eps);
- }
- }
-
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。