ZOJ 3898 Stean 矩形法求积分
2015-09-17 15:51
441 查看
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5601
题意:求一个绕y轴旋转的旋转体体积。R = 2+cos(z)。
思路:旋转体体积可以直接用积分求出来,旋转体表面积公式对于此题积分比较难积,所以用矩形法来求积分。
题意:求一个绕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; }
相关文章推荐
- 设计模式之: 代理模式
- Metronic_下拉列表Select2插件的使用
- ubuntu系统配置双网卡方法
- Jetty和Tomcat的比较
- Jetty和Tomcat的比较
- js之window对象操作
- struts2文件上传
- ping命令检测脚本
- 利用辗转相除法计算最大公约数与最小公倍数
- 输出组合排列的方案
- 【Code Forces 320C】【贪心+讨论】A Problem about Polyline 点在折线段上求最小的波浪长度
- git怎样删除未监视的文件untracked files
- 切图那点事
- Windchill的历史
- Effective Java学习笔记
- struts2文件上传
- 幸福是什么
- GirdView代码分析
- [JS插件] fullPage:适合移动端web整屏滚动组件
- 安畅亚太节点即将上线,战略布局海外市场