您的位置:首页 > 其它

旋转体的体积和表面积

2015-09-18 23:01 423 查看

积分公式

令曲线y=f(x)y=f(x)绕xx轴旋转,形成的旋转体,则其体积和表面积可以计算积分而得(假设体积和表面积一定存在,积分一定存在,这里不讨论数学问题)。

体积公式为:

V=∫πy2dxV={\int}{\pi}{y^2}dx

表面积公式为

S=∫2πy1+y′2−−−−−−√dxS=\int{2\pi}{y}\sqrt{1+{y^{\prime}}^2}dx

剩下的就是推导定积分公式。

ZOJ3866 Cylinder Candy

ZOJ3866,一个圆柱体半径为rrmm,高度为hhmm,外围包裹着ddmm厚的涂层,求其表面积和体积。这个题目要精确到10−810^{-8},推不出积分公式就不用做了。



整个部分最关键的就是四个边角的形状,四个边角合在一起恰好是一个圆环的外半侧。所以关键就是求圆环的外半侧的体积以及表面积。

曲线方程为:

y=r+d2−x2−−−−−−√,x∈[−d,d]y=r+\sqrt{d^2-x^2},x\in\left[-d,d\right]

则,体积积分为:

V=π∫(r2+d2−x2+2rd2−x2−−−−−−√)dx=π∫(r2+d2)dx−π∫x2dx+2πr∫d2−x2−−−−−−√dxV=\pi\int(r^2+d^2-x^2+2r\sqrt{d^2-x^2}\;)dx\\=\pi\int(r^2+d^2)dx-\pi\int{x^2}dx+2\pi{r}\int\sqrt{d^2-x^2}dx

第3项稍微麻烦一点,其不定积分为:

∫d2−x2−−−−−−√dx=12xd2−x2−−−−−−√+d22arcsinxd+C\int\sqrt{d^2-x^2}dx=\frac{1}{2}x\sqrt{d^2-x^2}+\frac{d^2}{2}arcsin{\frac{x}{d}}+C

表面积公式首先要求yy的导数:

y′=−xd2−x2−−−−−−√y\prime=-\frac{x}{\sqrt{d^2-x^2}}

所以,

1+y′2=d2d2−x21+{y\prime}^2=\frac{d^2}{d^2-x^2}

表面积的积分为:

S=2π∫(r+d2−x2−−−−−−√)dd2−x2−−−−−−√dx=2πrd∫1d2−x2−−−−−−√dx+2πd∫dxS=2\pi\int({r+\sqrt{d^2-x^2}})\frac{d}{\sqrt{d^2-x^2}}dx\\=2\pi{rd}\int\frac{1}{\sqrt{d^2-x^2}}dx+2\pi{d}\int{dx}

第一项就是arcsinxd+Carcsin\frac{x}{d}+C。

所以,体积和表面积全部可以求出原函数的解析式。

然后把其他部分的圆柱体算上即可。

#include <cstdio>
#include <cmath>

double const PI = acos(-1.0);
double const DELTA = 1E-6;
double R,H,D;

double integral(){
return (2.0*D*R*R+4.0*D*D*D/3.0+D*D*R*PI) * PI;
}

double integral2(){
return 4.0*PI*D*D + 2.0*PI*PI*R*D;
}

int main(){
int nofkase;
scanf("%d",&nofkase);
while( nofkase-- ){
scanf("%lf%lf%lf",&R,&H,&D);
double v = integral() + PI * ( R + D ) * ( R + D ) * H;
double s = integral2() + 2.0 * PI * ( R + D ) * H + 2.0 * PI * R * R;
printf("%.12lf %.12lf\n",v,s);
}
return 0;
}


ZOJ3898 Stean

ZOJ3898同样是旋转体的表面积和体积。曲线为:

y=2+cosxy=2+cosx

不同点在于定积分公式中有一项是得不到解析式的。但是这道题很明显曲线是周期性函数,定积分的周期就是π\pi,而题目要求在10−210^{-2}以内,所以取ϵ\epsilon为10−310^{-3}或10−410^{-4}直接使用积分定义去计算。每次计算需要迭代的次数在几万次,应该是没有问题的。

体积积分:

V=π∫(2+cosx)2dx=4π∫dx+4π∫cosxdx+π∫cos2xdxV=\pi\int(2+cosx)^2dx\\=4\pi\int{dx}+4\pi\int{cosx}dx\\+\pi\int{cos^2x}dx

其中第三项为:

∫cos2xdx=x2+sin2x4+C\int{cos^2x}dx=\frac{x}{2}+\frac{sin2x}{4}+C

表面积积分:

S=2π∫(2+cosx)1+sin2x−−−−−−−−√dx=4π∫1+sin2x−−−−−−−−√dx+2π∫1+sin2x−−−−−−−−√dsinxS=2\pi\int(2+cosx)\sqrt{1+sin^2x}\;dx\\=4\pi\int\sqrt{1+sin^2x}\;dx\\+2\pi\int\sqrt{1+sin^2x}\;dsinx

其中第一项不知道积不积得出来,反正我没有积出来。数学不行,就用计算机的方法算。第二项令t=sinxt=sinx,则

∫1+t2−−−−−√dt=12t1+t2−−−−−√+12ln∣∣t+1+t2−−−−−√∣∣+C\int\sqrt{1+t^2}\;dt=\frac{1}{2}t\sqrt{1+t^2}+\frac{1}{2}\ln{\left|{t+\sqrt{1+t^2}}\right|}+C

#include <cstdio>
#include <cmath>

double const PI = acos(-1.);
double const EPS = 1E-4;

//计算一个周期
double init1p(){
double ret = 0.0;
for(double x=0.0;x<=0.5*PI;x+=EPS){
double t = sin(x);
ret += sqrt(1.0+t*t);
}
return 8.0*PI*ret*EPS;
}

double const ONEP = init1p();

double v(double z1,double z2){
return 4.0 * PI * ( z2 - z1 )
+ 4.0 * PI * ( sin(z2) - sin(z1) )
+ 0.5 * PI * ( z2 - z1 )
+ 0.25 * PI * ( sin(z2+z2) - sin(z1+z1) );
}

double s(double z1,double z2){
//计算底面积
double y1 = 2.0 + cos(z1);
double ret = PI * y1 * y1;

//计算解析式的积分
double t2 = sin(z2), t1 = sin(z1);
double tt2 = sqrt(1.0+t2*t2), tt1 = sqrt(1.0+t1*t1);
ret += PI * ( t2 * tt2 - t1 * tt1 )
+ PI * ( log(fabs(t2+tt2)) - log(fabs(t1+tt1)) );

//计算周期
int n = (int)(( z2 - z1 ) / PI);
ret += ONEP * (double)n;

//计算积分
double tmp = 0.0;
for(double x=z1+PI*(double)n;x<=z2;x+=EPS){
double t = sin(x);
tmp += sqrt(1.0+t*t);
}
return ret += tmp * 4.0 * PI * EPS;
}

int main(){
int kase;
scanf("%d",&kase);
while(kase--){
double z1,z2;
scanf("%lf%lf",&z1,&z2);
printf("%.5lf %.5lf\n",v(z1,z2),s(z1,z2));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: