计算椭圆绕长轴旋转构成旋转体在平面x=2和x=4区间的体积v

写一函数float ellipse(int n),计算椭球部分体积,椭圆(xx)/(44)+(yy)/(33)=1绕长轴x旋转构成旋转体在平面x=2和x=4区间的体积v。可将旋转体沿x轴取平面n等分,每等分近似为小圆盘的体积。主函数中输入n,调用ellipse函数,返回体积,最后主函数输出(保留1位小数)。
【输入形式】 主函数

                  #include<stdio.h>
                  #include<math.h>
                  #define PI 3.1415926
                  int main()
                  {

                    float ellipse(int n);
                    int n;
                    float v;
                    printf("n=");
                    scanf("%d",&n);

                    ......

【输出形式】主函数 printf("v=%.1f\n",v);

【样例输入】n=1000

【样例输出】v=23.6

这里介绍一种解题思路,将椭圆绕长轴旋转的过程拆分成多个小圆盘的叠加,再通过积分求解每个小圆盘的体积。

  1. 将椭圆绕x轴旋转得到旋转体。

  2. 将旋转体分成n层,每层大小相等。

  3. 求出每层对应椭圆的长半轴和短半轴,设为a和b,以及该层在x轴上的横坐标位置x。

  4. 将该层近似为一个圆盘,计算该圆盘的体积。

  5. 将每层的体积累加,得到椭球部分体积。

下面是完整的代码实现:

#include <iostream>
#include <cmath>

using namespace std;

// 计算椭球部分体积
float ellipse(int n) {
    float a = sqrt(44.0);
    float b = sqrt(33.0);
    float h = (4.0 - 2.0) / n; // 每层高度
    float v = 0.0; // 总体积

    for (int i = 0; i < n; i++) {
        // 计算该层椭圆的长半轴和短半轴
        float x = 2.0 + h * i + h / 2.0;
        float y = sqrt((1 - pow((x - 2.0), 2) / 44.0) * 33.0);
        float a1 = y;
        float b1 = sqrt(44.0 - pow((x - 2.0), 2));

        // 计算该层近似为圆盘的体积
        float area = M_PI * pow(a1, 2) * h;

        // 计算该层对应的旋转体积
        float v1 = area * b1;

        // 累加总体积
        v += v1;
    }

    return v;
}

int main() {
    int n;
    cin >> n;

    float v = ellipse(n);

    cout.setf(ios::fixed);
    cout.precision(1);
    cout << v << endl;

    return 0;
}