球的体积并(计算几何+球缺)
链接: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;
}
球的体积并(计算几何+球缺)相关推荐
- “新角度”学习微积分:阿基米德是如何称出球的体积的?
2023年2月7日晚,我在图灵社区主办的"图灵八点半"栏目中分享了这个话题(视频请见"图灵社区"的微信视频号,见2月7日的直播回放).现在我把文字稿进一步完善一 ...
- 蓝桥杯-用宏求球的体积(java)
算法提高 7-1用宏求球的体积 时间限制:1.0s 内存限制:256.0MB问题描述使用宏实现计算球体体积的功能.用户输入半径,系统输出体积.不能使用函数,pi=3.1415926,结果精确到小数点后 ...
- java计算圆锥体积_六年级:美妙数学之“球的体积计算”(0430六)
美妙数学天天见,每天进步一点点.亲爱的小朋友,你好,我是朱乐平名师工作站的叶学品老师.今天向你介绍球的体积计算. 同学们,我们学过求一个物体的体积的一般方法是排水法.同学们肯定很好奇,球体能不能和圆柱 ...
- 信息学奥赛一本通 1030:计算球的体积 | OpenJudge NOI 1.3 12
[题目链接] ybt 1030:计算球的体积 OpenJudge NOI 1.3 12:计算球的体积 [题目考点] 1. 浮点型常量 如果直接写一个数字,就是一个整型常量,如:10. 如果要表示一个浮 ...
- 信息学奥赛一本通(1030:计算球的体积)
1030:计算球的体积 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 49088 通过数: 31805 [题目描述] 对于半径为 rr 的球,其体积的计算 ...
- 计算球的体积(信息学奥赛一本通-T1030)
[题目描述] 对于半径为r的球,其体积的计算公式为v=4/3*π*r^3这里取π=3.14.现给定r,即球半径,类型为double,求球的体积V,保留到小数点后2位. [输入] 输入为一个不超过100 ...
- 信息学奥赛一本通C++语言——1030: 计算球的体积
[题目描述] 对于半径为r的球,其体积的计算公式为v=4/3πr^3这里取π=3.14.现给定r,即球半径,类型为double,求球的体积V,保留到小数点后2位. [输入] 输入为一个不超过100的非 ...
- 圆的周长,面积,球的体积和表面积
#include <iostream>//预处理指令 #include <cmath> #include <iomanip> using namespace std ...
- 计算圆的周长、面积、球 的体积
'''计算圆的周长.面积.球的体积,得到如下结果: 半径=12.0 周长=75.40 面积=452.39 体积=7238.23'''from math import pi class Model: d ...
- 3.3 计算球的体积
描述 对于半径为r的球,其体积的计算公式为V=4/3*πr3,这里取π= 3.14. 现给定r,求V. 输入输入为一个不超过100的非负实数,即球半径,类型为double.输出输出一个实数,即球的体积 ...
最新文章
- [bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划
- mysql 的select语句_MySQLSELECT语句_MySQL
- Android笔记——在布局文件中插入另一个布局文件
- osgi简介_OSGi:简介
- phoenix创建索引报错“ Mutable secondary indexes must have the hbase.regionserver.wal.codec property”
- 8位16位32位单片机区别
- 手机网页宽度自动适应屏幕宽度的方…
- flex 常用正则验证举例
- jQuery-4.动画篇---动画基础隐藏和显示
- PAT 1051-1060 题解
- 熬了三个通宵的CV学习心法!我开眼了!
- 如何正确计算导入Excel的行数(POI/NPOI)
- 20829-55-4,cyclo-(L-Trp-L-Trp),cyclo-L-tryptophan-L-tryptophan,cyclo(Trp-Trp)
- 如何“拼”出一个页面-游戏中心模块化实践
- DHCP如何分配IP地址
- 电脑显示器基本设置与故障处理
- 一生中最值得珍藏的电影台词
- 图像沿列方向降维的AVX2实现讨论
- Oracle转换MySql之递归start with
- 仓库物品领用吉度PDA出入库盘点扫码方案
热门文章
- 使用python制作属于自己的地铁图
- UI 设计师不容错过的12款APP UI 交互设计
- 计算机组装流程详解,笔记本电脑组装全过程图文详解
- python3编码解码
- 微信多开设置网络代理服务器,微信多开终极技巧,可随意控制数量已亲测很好用...
- 计算机容斥原理,三集合容斥原理解题技巧
- Response.AddHeader 参数
- 猪齿鱼_01_环境搭建(一)_微服务支撑组件部署(源码形式)
- 编1加到100的代码用C语言,用C语言编写一个程序,计算从1加到100的和,并将结果输出。跪求代码,急!...
- win10计算机磁盘图标,Win10系统硬盘图标怎么更换?Win10系统自定义硬盘图标的方法...