牛客练习赛41 E-球的体积并——————几何
链接: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><x1,y1,z1,r1><x1,y1,z1,r1>和<x2,y2,z2,r2><x2,y2,z2,r2><x2,y2,z2,r2>表示,其中 r1、r2r1、r2r1、r2表示球半径, (x1,y1,z1)(x1,y1,z1)(x1,y1,z1)和 (x2,y2,z2)(x2,y2,z2)(x2,y2,z2)表示球心
lililalala想知道安全区的总体积是多少?即求这两个球的体积并。
输入描述:
输入有两行。
第一行四个实数 x1,y1,z1,r1x1,y1,z1,r1x1,y1,z1,r1–第一个球的球心坐标和半径。
第二行四个实数 x2,y2,z2,r2x2,y2,z2,r2x2,y2,z2,r2–第二个球的球心坐标和半径。
保证所有输入的坐标和半径的范围都在 [−100,100][−100,100][−100,100] 内。
输出描述:
输出一行一个实数–表示两个球的体积并,你的答案被认为正确,当且仅当绝对误差不超过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
两个球不相交或者小球在大球内部的情况非常简单,结果就是球的体积
两球相交的时候,即 fabs(r1−r2)<d<r1+r2fabs(r_1-r_2)<d<r_1+r_2fabs(r1−r2)<d<r1+r2的情况
结果是两个球的体积减去它们球缺的体积就好了
球缺
- 一个球被平面截下的一部分叫做球缺。
- 截面叫做球缺的底面
- 垂直于截面的直径被截后被截下的线段长叫做球缺的高。
- 球缺曲面部分的面积(球冠面积)S=2πRhS=2πRhS=2πRh
- 球缺体积公式V=(π/3)(3R−h)∗h2=πh2(R−h3)V=(π/3)(3R-h)*h^2=\pi h^2(R-\frac{h}{3})V=(π/3)(3R−h)∗h2=πh2(R−3h)(R是球的半径,H是球缺的高)。
即
V=πh2(R−h3)\large V =\pi h^2(R-\frac{h}{3})V=πh2(R−3h)
如图所示,上边被切下来的部分就是球缺…我们需要知道它的体积
code
#include<bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);struct Point{double x,y,z,r;
}a,b;double dis(Point a,Point b)
{return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) + (a.z-b.z)*(a.z-b.z));
}
int main()
{// freopen("../in.txt","r",stdin);// freopen("../out.txt","w",stdout);cin>>a.x>>a.y>>a.z>>a.r;cin>>b.x>>b.y>>b.z>>b.r;double d = dis(a,b);double ans = 4.0*PI*(a.r*a.r*a.r+b.r*b.r*b.r)/3.0;if(d<=fabs(a.r-b.r)) ans = 4.0*PI*pow(a.r>b.r?a.r:b.r,3)/3.0;//小球在大球内else if(d<a.r+b.r){//两球相交,减去两个球缺的体积double cosq1 = (a.r*a.r + d*d - b.r*b.r)/(2.0*a.r*d); //对应的余弦角double cosq2 = (b.r*b.r + d*d - a.r*a.r)/(2.0*b.r*d);double h1 = a.r*(1-cosq1);//a球 球缺的高double h2 = b.r*(1-cosq2);//b球 球缺的高ans -= PI*h1*h1*(a.r-h1/3.0);//球缺体积公式ans -= PI*h2*h2*(b.r-h2/3.0);//减去b球的球缺部分}printf("%.7f\n",ans);return 0;
}
牛客练习赛41 E-球的体积并——————几何相关推荐
- 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 牛客练习赛41 b 666RPG (01背包)
时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 在欧美,"666"是个令人 ...
- 牛客练习赛41 D.最小相似度(思维+bfs)
传送门 给定nnn个长mmm位的二进制串 求一个二进制串TTT,定义valival_ivali是TTT与第iii个二进制串相同的位数 使得max(val1,val2....valn)max(val_ ...
- 牛客练习赛46T1-华华教奕奕写几何【数学】
正题 题目链接:https://ac.nowcoder.com/acm/contest/894/A 题目大意 一个大半圆里面放两个小半圆要求两个小半圆的半径之和等于大半圆的半径,而且红色面积为SSS. ...
- 牛客练习赛68 B.牛牛的算术
牛客练习赛68 B.牛牛的算术 题目链接 题目描述 牛牛最近学习了取模是什么 于是他看到了下面这一道题: 多次询问:每次询问包含一个正整数 n 要求你输出下列结果 ∏i=1n∑j=1i∑k=1ji×j ...
- 牛客练习赛58 C.矩阵消除游戏
牛客练习赛58 C.矩阵消除游戏 题目链接 题目描述 牛妹在玩一个名为矩阵消除的游戏,矩阵的大小是n行m列,第i行第j列的单元格的权值为ai,ja_{i,j}ai,j ,牛妹可以进行k个回合的游戏, ...
- 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...
- 牛客练习赛34 E little w and Digital Root(数位dp)
title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...
- 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)
title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...
- 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)
牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...
最新文章
- 常用构建数据科学应用程序的七个Python库
- PluckerNet:一种基于3D线匹配的配准网络(CVPR2021)
- Linux 命令 —— scp linux之间复制文件和目录
- jQuery事件3——trigger触发事件
- python根据BM25实现文本检索
- Visual Studio Code 1.36 发布,结束对 Linux 32 位系统的支持
- Hadoop 信息集成平台,让大数据分析更简单!
- Amazon 首席科学家李沐亲授「深度学习」,2019 AI ProCon震撼来袭!(日程出炉)...
- SpringBoot之集成MybatisPlus
- 求1到20的阶乘之和
- thinkpad解决Win8.1电源管理的方法
- 计算机显示器一半有阴影,电脑显示器有阴影的解决方法,希望你们喜欢!
- MIMO技术(一)分集与复用
- ADO.NET如何读取Excel(转自晓风残月)
- c语言 统计数量用count_C语言中count是什么意思?
- Win10 没有激活,如何改变任务栏位置
- 【浙江大学】一个开源的知识图谱表示学习框架
- Android 增量更新
- nginx-quic
- 最受程序员欢迎的图书推荐