题意:
给出两个完全相同的圆柱的底面半径和高,让这两个圆柱正交,求体积。
思路:
分为两种情况:
①、2*r<h
我们把中间相交的部分分为8个相同部分来看,我们只考虑第一象限那部分的体积v。
v=∫(0→r)√(r^2-x^2)*√(r^2-x^2)dx
②、2*r>h
分为中间的四方体和两边的那个弧状物体。中间的四方体单独算,边上的那个图形的体积v如下。
v=∫(0→r)√(r^2-x^2)*√(r^2-x^2)dx-∫(0→√(r^2-(h/2)^2))√(r^2-x^2)*√(r^2-x^2)dx
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define PI acos(-1)
using namespace std;
int main()
{
double r,h;
while(scanf("%lf%lf",&r,&h)!=EOF)
{
double ans=PI*r*r*h;
ans*=2.0;
if(2.0*r>h)
{
double tt=sqrt(r*r-(h/2.0)*(h/2.0));
double tmp=tt*(h/2.0)*(h/2.0);
tmp+=(2.0*r*r*r/3.0);
tmp-=(r*r*tt);
tmp+=(tt*tt*tt/3.0);
tmp*=8.0;
ans-=tmp;
}
else
ans-=(r*r*r*16.0/3.0);
printf("%.4lf\n",ans);
}
return 0;
}