acdream1234(Simpson积分)

链接:点击打开链接

题意:给出两个圆柱体的底面半径,一个垂直放置一个水平放置,求相交部分的体积

代码:

#include <math.h>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <algorithm>
using namespace std;
const double eps=1e-10;
double r,R;
double f(double x){
    return sqrt(r*r-x*x)*sqrt(R*R-x*x);
}
double simpson(double le,double re){
    return (re-le)/6*(f(le)+4*f((le+re)/2)+f(re));
}
double cal(double le,double re){                //simpson求定积分
    double ans,mid;
    mid=(le+re)/2;
    ans=simpson(le,re);
    if(fabs(ans-simpson(le,mid)-simpson(mid,re))<eps)
    return ans;
    return cal(le,mid)+cal(mid,re);
}
int main(){                                     //从侧视图来分析,可以得出两个圆柱的相交
    while(scanf("%lf%lf",&r,&R)!=EOF){          //的截面为矩形,那么就是平行截面面积为已知
        if(r>R)                                 //的立体的体积,所以可以直接定积分求解
        swap(r,R);                              //求∫2*√(R^2-x^2)*2*√(r^2-x^2)积分区间为-r到r
        printf("%.5lf\n",8*cal(0,r));           //化简就是8*∫√(R^2-x^2)*√(r^2-x^2)积分区间为0到r
    }
    return 0;
}


P.s二重积分直接求出公式V=16/3*min(r,R)^3.....但是为什么过不了......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值