牛客练习赛41 E 球并的体积【几何】

题目链接:https://ac.nowcoder.com/acm/contest/373/B;


了解几个公式,顺便自己记一下:

球的体积:v=4/3*r*r*r*PI;
球表面积:v=4*r*r*PI;

球冠:球被平面截下较小的一部分;
球冠表面积:S=2*PI*r*h  (r是球的半径,h是球冠的高,即垂直于截面的直径被截后被截下的线段长)
球冠的体积:V=PI/3*h*h*(3*r-h);

余弦公式

                     

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const double pi=acos(-1.0);
const ll mod=1e9+7;
const int N=1e5+10;double cal(double r)
{return r*r*r*pi*(4/3.0);
}double cal_jiao(double r1,double l,double r2)
{return (r1*r1+l*l-r2*r2)/(2*r1*l);
}double cal_que(double r,double h)
{return pi/3*h*h*(3*r-h);
}int main()
{double x1,x2,y1,y2,r1,r2,z1,z2;while(~scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&x1,&y1,&z1,&r1,&x2,&y2,&z2,&r2)){double l=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));double ans=0;if(l>=r1+r2){ans=cal(r1)+cal(r2);}else if(r1+l<=r2||r2+l<=r1){ans=cal(max(r1,r2));}else{double jiao1=cal_jiao(r1,l,r2);double jiao2=cal_jiao(r2,l,r1);double h1=r1-r1*jiao1,h2=r2-r2*jiao2;ans=cal(r1)+cal(r2)-cal_que(r1,h1)-cal_que(r2,h2);}printf("%.7lf\n",ans);}return 0;
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部