ZOJ 3898 Stean (求旋转体体积与面积)

1. 题目链接:

传送门

2. 题意:

给定一个不规则的圆柱的上下两面的竖坐标以及半径 R 与坐标的关系: R=2cos(x) ,求着个物体的体积以及侧面积和底面积之和。

3. 分析:

将其看成一个旋转体:

1. 旋转体的体积的求法:

将其微分,看成无数个小圆柱体的和然后做定积分就可以了。

V=z2z12π(2+cos2(x))dx

这个积分很好求,化简之后为:
V=π(4x+2sin(x)+x/2+sin(2x))|z2z1

2. 求旋转体的表面积:

S=z2z12πf(x)1+f2(x)dx

这个积分不是很好求我们可以用 辛普森积分法来求解。

4. Code

#include <bits/stdc++.h>

using namespace std;

const double pi = acos(-1.0);

double calc(double u)
{
    return 4.0*sin(u)+sin(u*2.0)/4.0+9.0*u/2.0;
}

double f(double u)
{
    return cos(u)+2.0;
}

double df(double u)
{
    return (2.0+cos(u))*sqrt(1.0+sin(u)*sin(u));
}

double xps(double l,double r)
{
    return (r-l)*(df(r)+4.0*df((l+r)/2)+df(l))/6.0;
}


int main(){
    int t;
    double z1,z2;
    cin>>t;
    while(t--){
        cin>>z1>>z2;
        double ans=calc(z2)-calc(z1);
        double ans1=0;
        double h=(z2-z1)/5001;
        double g = z1;
        for (int i=1;i<=5001;i++)
        {
            ans1+=xps(g,g+h);
            g+=h;
        }
        ans1*=2*pi;
        ans1+=pi*f(z1)*f(z1);
        printf("%.2lf %.2lf\n",ans*pi,ans1);
    }
    return 0;
}

你可能感兴趣的:(ZOJ,定积分,求旋转体体积)