zoukankan      html  css  js  c++  java
  • ZOJ 3898 Stean 矩形法求积分

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5601

    题意:求一个绕y轴旋转的旋转体体积。R = 2+cos(z)。

    思路:旋转体体积可以直接用积分求出来,旋转体表面积公式对于此题积分比较难积,所以用矩形法来求积分。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int T;
     4 double z1, z2, V, area;
     5 const double pai = acos(-1.0);
     6 double getV()
     7 {
     8     double x1 = 4.5*z1 + 4*sin(z1) + 0.25*sin(2*z1);
     9     double x2 = 4.5*z2 + 4*sin(z2) + 0.25*sin(2*z2);
    10     return pai*(x2-x1);
    11 }
    12 double fun(double x)
    13 {
    14     return 2*pai*(2+cos(x))*sqrt(1.0+sin(x)*sin(x));
    15 }
    16 double getpart(double x, double y)
    17 {
    18     double ans = 0;
    19     double cut = (y-x)/5000;
    20     double low = x, high;
    21     for(int i = 1; i <= 5000; i++)
    22     {
    23         high = low+cut;
    24         ans += (fun(low) + fun(high))/2*cut;
    25         low += cut;
    26     }
    27     return ans;
    28 }
    29 int main()
    30 {
    31     scanf("%d", &T);
    32     while(T--)
    33     {
    34         scanf("%lf%lf", &z1, &z2);
    35         if(z1 > z2) swap(z1, z2);
    36 
    37         V = getV();
    38         int cnt = int((z2-z1)/(pai*2));
    39         area = pai*(2+cos(z1))*(2+cos(z1));
    40         area += getpart(z1, z1+2*pai)*cnt;
    41         area += getpart(z1+2*pai*cnt, z2);
    42         printf("%.8lf %.8lf
    ", V, area);
    43 
    44     }
    45     return 0;
    46 }

     

  • 相关阅读:
    new Handler()和new Handler(Looper.getMainLooper())的区别
    Okhttp3日志采集功能
    【ACM打卡】ZOJ 1001 1048
    20180808 阿里巴巴测试开发工程师一面
    20180601 -1
    20180601
    20180601 指针
    20180601 虚函数
    20180601 C++-1
    20180601 C++
  • 原文地址:https://www.cnblogs.com/titicia/p/4816610.html
Copyright © 2011-2022 走看看