链接:https://ac.nowcoder.com/acm/contest/373/E
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
Special Judge, 64bit IO Format: %lld

题目描述

某天lililalala正在玩一种奇妙的吃鸡游戏--因为在这个游戏里会同时有两个圆形安全区(他们可能相交)。

lililalala觉得求圆的面积并太简单了,所以想把这个问题升级一下。

现在在三维空间里有 2 个球形安全区,分别用四元组  <x1,y1,z1,r1>和 <x2,y2,z2,r2> 表示,其中  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 <iostream>
#include <cmath>
using namespace std;
const double pi = acos(-1.0);
int main(){double x1,y1,z1,r1;cin >> x1 >> y1 >> z1 >> r1;double x2,y2,z2,r2;cin >> x2 >> y2 >> z2 >> r2;double rr1=r1+r2;//半径和double rr2=fabs(r1-r2);//半径差double l=sqrt(pow(x1-x2,2)+pow(y1-y2,2)+pow(z1-z2,2));//球心距if(rr1<=l) printf("%.7f\n",4.0/3*pi*r1*r1*r1+4.0/3*pi*r2*r2*r2);//两球相离和外切,总体积else if(rr2>=l){//两球内含和内切,j较大的那个球的体积double maxx=max(r1,r2);printf("%.7f\n",4.0/3*pi*maxx*maxx*maxx);}else {//两球相交double l1,l2,h1,h2,v,v1,v2;l1=((r1*r1-r2*r2)/l+l)/2;l2=l-l1;h1=r1-l1;//求出h1h2=r2-l2;//求出h2v1=pi*h1*h1*(r1-h1/3);//相交部分的体积1v2=pi*h2*h2*(r2-h2/3);相交部分的体积2v=4.0/3*pi*r1*r1*r1+4.0/3*pi*r2*r2*r2;//总体积printf("%.7f\n",v-v1-v2);}return 0;
}

球的体积并(计算几何+球缺)相关推荐

  1. “新角度”学习微积分:阿基米德是如何称出球的体积的?

    2023年2月7日晚,我在图灵社区主办的"图灵八点半"栏目中分享了这个话题(视频请见"图灵社区"的微信视频号,见2月7日的直播回放).现在我把文字稿进一步完善一 ...

  2. 蓝桥杯-用宏求球的体积(java)

    算法提高 7-1用宏求球的体积 时间限制:1.0s 内存限制:256.0MB问题描述使用宏实现计算球体体积的功能.用户输入半径,系统输出体积.不能使用函数,pi=3.1415926,结果精确到小数点后 ...

  3. java计算圆锥体积_六年级:美妙数学之“球的体积计算”(0430六)

    美妙数学天天见,每天进步一点点.亲爱的小朋友,你好,我是朱乐平名师工作站的叶学品老师.今天向你介绍球的体积计算. 同学们,我们学过求一个物体的体积的一般方法是排水法.同学们肯定很好奇,球体能不能和圆柱 ...

  4. 信息学奥赛一本通 1030:计算球的体积 | OpenJudge NOI 1.3 12

    [题目链接] ybt 1030:计算球的体积 OpenJudge NOI 1.3 12:计算球的体积 [题目考点] 1. 浮点型常量 如果直接写一个数字,就是一个整型常量,如:10. 如果要表示一个浮 ...

  5. 信息学奥赛一本通(1030:计算球的体积)

    1030:计算球的体积 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 49088     通过数: 31805 [题目描述] 对于半径为 rr 的球,其体积的计算 ...

  6. 计算球的体积(信息学奥赛一本通-T1030)

    [题目描述] 对于半径为r的球,其体积的计算公式为v=4/3*π*r^3这里取π=3.14.现给定r,即球半径,类型为double,求球的体积V,保留到小数点后2位. [输入] 输入为一个不超过100 ...

  7. 信息学奥赛一本通C++语言——1030: 计算球的体积

    [题目描述] 对于半径为r的球,其体积的计算公式为v=4/3πr^3这里取π=3.14.现给定r,即球半径,类型为double,求球的体积V,保留到小数点后2位. [输入] 输入为一个不超过100的非 ...

  8. 圆的周长,面积,球的体积和表面积

    #include <iostream>//预处理指令 #include <cmath> #include <iomanip> using namespace std ...

  9. 计算圆的周长、面积、球 的体积

    '''计算圆的周长.面积.球的体积,得到如下结果: 半径=12.0 周长=75.40 面积=452.39 体积=7238.23'''from math import pi class Model: d ...

  10. 3.3 计算球的体积

    描述 对于半径为r的球,其体积的计算公式为V=4/3*πr3,这里取π= 3.14. 现给定r,求V. 输入输入为一个不超过100的非负实数,即球半径,类型为double.输出输出一个实数,即球的体积 ...

最新文章

  1. [bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划
  2. mysql 的select语句_MySQLSELECT语句_MySQL
  3. Android笔记——在布局文件中插入另一个布局文件
  4. osgi简介_OSGi:简介
  5. phoenix创建索引报错“ Mutable secondary indexes must have the hbase.regionserver.wal.codec property”
  6. 8位16位32位单片机区别
  7. 手机网页宽度自动适应屏幕宽度的方…
  8. flex 常用正则验证举例
  9. jQuery-4.动画篇---动画基础隐藏和显示
  10. PAT 1051-1060 题解
  11. 熬了三个通宵的CV学习心法!我开眼了!
  12. 如何正确计算导入Excel的行数(POI/NPOI)
  13. 20829-55-4,cyclo-(L-Trp-L-Trp),cyclo-L-tryptophan-L-tryptophan,cyclo(Trp-Trp)
  14. 如何“拼”出一个页面-游戏中心模块化实践
  15. DHCP如何分配IP地址
  16. 电脑显示器基本设置与故障处理
  17. 一生中最值得珍藏的电影台词
  18. 图像沿列方向降维的AVX2实现讨论
  19. Oracle转换MySql之递归start with
  20. 仓库物品领用吉度PDA出入库盘点扫码方案

热门文章

  1. 使用python制作属于自己的地铁图
  2. UI 设计师不容错过的12款APP UI 交互设计
  3. 计算机组装流程详解,笔记本电脑组装全过程图文详解
  4. python3编码解码
  5. 微信多开设置网络代理服务器,微信多开终极技巧,可随意控制数量已亲测很好用...
  6. 计算机容斥原理,三集合容斥原理解题技巧
  7. Response.AddHeader 参数
  8. 猪齿鱼_01_环境搭建(一)_微服务支撑组件部署(源码形式)
  9. 编1加到100的代码用C语言,用C语言编写一个程序,计算从1加到100的和,并将结果输出。跪求代码,急!...
  10. win10计算机磁盘图标,Win10系统硬盘图标怎么更换?Win10系统自定义硬盘图标的方法...