本文主要是介绍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到rprintf("%.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.....但是为什么过不了......
这篇关于acdream1234(Simpson积分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!