生活随笔
收集整理的這篇文章主要介紹了
求两个球的体积并
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
兩個球和兩個圓一樣,有三種情況。相交,分離(包括兩種情況)
對于分離的兩種情況,好計算。但是對于相交的情況,不好計算。需要計算球冠的大小。
就是這樣。昨天晚上牛客上有一個關于這樣的題
代碼如下:
#include<bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
double x1,y11,z1,r1;
double x2,y2,z2,r2;
//球冠的體積:PI*h*h/(3*r-h)其中h是圓的半徑r-圓心到截圓的平面的距離dis。h1=r1-(r1*r1-r2*r2+d*d)/(2*d)其中d為兩圓心之間的距離。
int main()
{scanf("%lf%lf%lf%lf",&x1,&y11,&z1,&r1);scanf("%lf%lf%lf%lf",&x2,&y2,&z2,&r2);double dis=sqrt((x1-x2)*(x1-x2)+(y11-y2)*(y11-y2)+(z1-z2)*(z1-z2));if(dis>=r1+r2){double s=4.0/3.0*PI*(r1*r1*r1+r2*r2*r2);printf("%.7lf\n",s);}else if(dis<=fabs(r1-r2)){double maxn=max(r1,r2);double s=4.0/3.0*PI*(maxn*maxn*maxn);printf("%.7lf\n",s);}else{double s=3.0/4.0*PI*(r1*r1*r1+r2*r2*r2);double h1=r1-(r1*r1-r2*r2+dis*dis)/(2*dis);s-=(PI*h1*h1*(3*r1-h1)/3.0);double h2=r2-(r2*r2-r1*r1+dis*dis)/(2.0*dis);s-=(PI*h2*h2*(3*r2-h2)/3.0);printf("%.7lf\n",s);}
}
還是把公式記住,要不比賽的時候自己推太麻煩了。
球冠的體積:PIhh/(3r-h)其中h是圓的半徑r-圓心到截圓的平面的距離dis。h1=r1-(r1r1-r2r2+dd)/(2*d)其中d為兩圓心之間的距離
努力加油a啊(o)/~
總結
以上是生活随笔為你收集整理的求两个球的体积并的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。