您的位置:首页 > 其它

ZOJ 3898 Stean 矩形法求积分

2015-09-17 15:51 441 查看
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5601

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

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

#include <bits/stdc++.h>
using namespace std;
int T;
double z1, z2, V, area;
const double pai = acos(-1.0);
double getV()
{
double x1 = 4.5*z1 + 4*sin(z1) + 0.25*sin(2*z1);
double x2 = 4.5*z2 + 4*sin(z2) + 0.25*sin(2*z2);
return pai*(x2-x1);
}
double fun(double x)
{
return 2*pai*(2+cos(x))*sqrt(1.0+sin(x)*sin(x));
}
double getpart(double x, double y)
{
double ans = 0;
double cut = (y-x)/5000;
double low = x, high;
for(int i = 1; i <= 5000; i++)
{
high = low+cut;
ans += (fun(low) + fun(high))/2*cut;
low += cut;
}
return ans;
}
int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%lf%lf", &z1, &z2);
if(z1 > z2) swap(z1, z2);

V = getV();
int cnt = int((z2-z1)/(pai*2));
area = pai*(2+cos(z1))*(2+cos(z1));
area += getpart(z1, z1+2*pai)*cnt;
area += getpart(z1+2*pai*cnt, z2);
printf("%.8lf %.8lf\n", V, area);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: