程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> acdream 1234 Two Cylinders

acdream 1234 Two Cylinders

編輯:C++入門知識

acdream 1234 Two Cylinders


Two Cylinders

Special JudgeTime Limit: 10000/5000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatisticNext Problem

Problem Description

In this problem your task is very simple.

Consider two infinite cylinders in three-dimensional space, of radii R1 and R2 respectively, located in such a way that their axes intersect and are perpendicular.

Your task is to find the volume of their intersection.

Input

Input file contains two real numbers R1 and R2 (1 <= R1,R2 <= 100).

Output

Output the volume of the intersection of the cylinders. Your answer must be accurate up to 10-4.

Sample Input

1 1

Sample Output

5.3333

Source

Andrew Stankevich Contest 3

Manager

mathlover


題解及代碼:

這道題的意思很簡單,就是求兩個垂直相交的圓柱的重合體積。推導的思想可以見:點擊打開鏈接

根據上面的方法我們可以推出截面公式是sqrt(R*R-x*x)*sqrt(r*r-x*x),然後積分的上下限是0--r。

雖然這公式推出來了,但是積分很困難(沒推出來= =!),下面的代碼用的是辛普森積分法,學習了一下,挺簡單的。

主要就是這個:vc/QobXEyrG68qOszvOy7rK7tPOjrLWrysfK/bHIvc+087XEyrG68qOszvOy7r7Nuty088HLo6zL+dLUvMbL47n9s8zW0NKqyrnTw7b+t9bAtLDRx/i85Lz10KGjrLz10KHO87LuoaM8L3A+CjxwPjxicj4KPC9wPgo8cD48cHJlIGNsYXNzPQ=="brush:java;">#include #include #include using namespace std; const double eps=1e-7; double R,r; double f(double n) { return 8*sqrt(R*R-n*n)*sqrt(r*r-n*n); } double simpson(double a,double b) { return (b-a)/6.0*(f(a)+4*f((a+b)/2.0)+f(b)); } double cal(double a,double b) { double sum=simpson(a,b),mid=(a+b)/2.0; double t=simpson(a,mid)+simpson(mid,b); if(fabs(t-sum)



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved