当前位置:   article > 正文

HDU 3668 View Code (二重积分)_hdu3668

hdu3668

大体题意:

求图中交叉圆柱体的体积!

思路:

真是充分反映了高数能力!  是真弱啊,,想了6,7个小时了,才想明白! = =T_T!!!!

大体思路很明确,把两个圆柱的体积加起来 减去中间公共部分的即可!

第一步首先得想到公共部分是一个怎样的图形。

这个在高数下册例题中有讲到!

中间实线部分就是第一卦限内的图形,显然一个二重积分就可以搞定:

这种情况比较简单点,适合于2*R <= h 的时候!

如果2*R > h话!

需要加点想象力,中间公共部分 是一个长方体 加上两个小突起

也是把他分成8份,只算第一卦限内的。

把他放到坐标系里 与上一个图相比,没什么变换 只是将上一个图沿x轴平移了h/2 个单位,而0~h/2这片区域是一个长方体!

这样只需改变积分上下限即可!公式不变!(这里想了很久)

详细见代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cmath>
  5. using namespace std;
  6. const double eps = 1e-8;
  7. const double pi = acos(-1.0);
  8. int main(){
  9. double r,h;
  10. while(scanf("%lf %lf",&r,&h) == 2){
  11. if (2*r > h + eps){
  12. double a = sqrt(r*r-h*h/4);
  13. // printf("%lf\n",a);
  14. double V = 2*pi*r*r*h;
  15. double other = h*h*a/4 + r*r*r*2/3 + (a)*(a)*(a)/3 - r*r*a;
  16. double ans = V-8.0*other;
  17. printf("%.4lf\n",ans+eps);
  18. }else{
  19. double V = 2*pi*r*r*h;
  20. double other = 8*2*r*r*r/3;
  21. double ans = V-other;
  22. printf("%.4lf\n",ans+eps);
  23. }
  24. }
  25. return 0;
  26. }



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/608717
推荐阅读
相关标签
  

闽ICP备14008679号