時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 32768k,其他語言65536k
special judge, 64bit io format: %lld
某天lililalala正在玩一種奇妙的吃雞遊戲--因為在這個遊戲裡會同時有兩個圓形安全區(他們可能相交)。
lililalala覺得求圓的面積並太簡單了,所以想把這個問題公升級一下。
現在在三維空間裡有 2 個球形安全區,分別用四元組 和 表示,其中 r1、r2 表示球半徑, (x1,y1,z1)和 (x2,y2,z2) 表示球心
lililalala想知道安全區的總體積是多少?即求這兩個球的體積並。
輸入有兩行。第一行四個實數 x1,y1,z1,r1 --第乙個球的球心座標和半徑。
第二行四個實數 x2,y2,z2,r2--第二個球的球心座標和半徑。
保證所有輸入的座標和半徑的範圍都在 [−100,100] 內。半徑為非負數。
輸出一行乙個實數--表示兩個球的體積並,你的答案被認為正確,當且僅當絕對誤差不超過 10−6 10−6。示例1
複製
0 0 0 1複製2 0 0 1
8.3775804示例2
複製
0 0 0 1複製0 0 0 0.5
4.1887902題意:求球的體積並~
題解:球的體積:4.0/3πr^3,球的表面積:4πr^2
球冠面積s=2πrh(此處為擴充套件,此題用不到) 球缺的體積公式為v=πh^2(r−h/3) h為球冠高 ,r為球半徑,此題關鍵是求h~~
兩球心距離=l 半徑分別為r1 , r2 兩球相交的截面為平面,相交線為圓,半徑為r3 截面到球心的距離分別為l1 ,l2 l1+l2=l;
則很容易知道:
r1^2=r3^2+l1^2;
r2^2=r3^2+l2^2;
因為r1,r3,l1 和 r2,r3,l2分別形成兩個直角三角形,斜邊為r1和r2;
用上面第乙個式子減第二個式子得到:
r1^2−r2^2=l1^2−l2^2
r1^2−r2^=(l1+l2)(l1−l2)
因為 l1+l2=l; 所以l2=l-l1
則:r1^2−r2^2=(2l1−l)l
l1=[(r1^2−r2^2)/l+l]/2
l2=l−l1
兩個球冠高:h1=r1−l1 h2=r2−l2
這是在兩球相交的情況下的推導~~其他情況體積並好求~~~
上**:
#include #include using namespace std;
const double pi = acos(-1.0);
int main()
else
return 0;
}
計算幾何 記錄求兩球體相交部分體積(球缺)模板
include include include include define clr a,b memset a,b,sizeof a const int inf 0x3f3f3f3f using namespace std const double pi acos 1.0 typedef unsig...
球的體積交和並
某天lililalala正在玩一種奇妙的吃雞遊戲 因為在這個遊戲裡會同時有兩個圓形安全區 他們可能相交 lililalala覺得求圓的面積並太簡單了,所以想把這個問題公升級一下。現在在三維空間裡有 2 個球形安全區,分別用四元組 和 表示,其中 r1 r2表示球半徑,x1,y1,z1 和 x2,y2...
球球的體積。HDU 2002
problem description 根據輸入的半徑值,計算球的體積。input 輸入資料有多組,每組佔一行,每行包括乙個實數,表示球的半徑。output 輸出對應的球的體積,對於每組輸入資料,輸出一行,計算結果保留三位小數。sample input1 1.5sample output 4.189...