两个球的体积相加减去交就是并

#include <bits/stdc++.h>using namespace std;typedef long long LL;
const int maxn=1e5+5;
const int maxm=5e5+5;
const int inf=0x3f3f3f3f;#define PI acos(-1.0)typedef struct point {double x,y,z;point() {}point(double a, double b,double c) {x = a;y = b;z = c;}point operator -(const point &b)const {     //返回减去后的新点return point(x - b.x, y - b.y,z-b.z);}point operator +(const point &b)const {     //返回加上后的新点return point(x + b.x, y + b.y,z+b.z);}//数乘计算point operator *(const double &k)const {    //返回相乘后的新点return point(x * k, y * k,z*k);}point operator /(const double &k)const {    //返回相除后的新点return point(x / k, y / k,z/k);}double operator *(const point &b)const {    //点乘return x*b.x + y*b.y+z*b.z;}
}point;
double dist(point p1, point p2) {       //返回平面上两点距离return sqrt((p1 - p2)*(p1 - p2));
}
typedef struct sphere {//球point centre;double r;
}sphere;double Sphere_s(sphere a) {return 4 * PI * a.r * a.r * a.r / 3.0;
}double SphereInterVS(sphere a, sphere b) {double d = dist(a.centre, b.centre);//球心距// cout << d << " " << (a.r + b.r) << endl;if(d >= (a.r + b.r)) return 0;if(a.r > b.r) swap(a, b);if(d + a.r <= b.r) return Sphere_s(a);double t = (d*d + a.r*a.r - b.r*b.r) / (2.0 * d);//double h = sqrt((a.r*a.r) - (t*t)) * 2;//h1=h2,球冠的高double angle_a = 2 * acos((a.r*a.r + d*d - b.r*b.r) / (2.0 * a.r*d));  //余弦公式计算r1对应圆心角,弧度double angle_b = 2 * acos((b.r*b.r + d*d - a.r*a.r) / (2.0 * b.r*d));  //余弦公式计算r2对应圆心角,弧度double l1 = ((a.r*a.r - b.r*b.r) / d + d) / 2;double l2 = d - l1;double x1 = a.r - l1, x2 = b.r - l2;//分别为两个球缺的高度double v1 = PI*x1*x1*(a.r - x1 / 3);//相交部分r1圆所对应的球缺部分体积double v2 = PI*x2*x2*(b.r - x2 / 3);//相交部分r2圆所对应的球缺部分体积return v1 + v2;//相交部分体积
}int main()
{point p1, p2;double r1, r2;scanf("%lf %lf %lf %lf", &p1.x, &p1.y, &p1.z, &r1);scanf("%lf %lf %lf %lf", &p2.x, &p2.y, &p2.z, &r2);sphere s1 = {p1, r1}, s2 = {p2, r2};printf("%.10f\n", Sphere_s(s1) + Sphere_s(s2) - SphereInterVS(s1, s2));return 0;
}

牛客练习赛41 E 球的体积并相关推荐

  1. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  2. 牛客练习赛41 b 666RPG (01背包)

    时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 在欧美,"666"是个令人 ...

  3. 牛客练习赛41 D.最小相似度(思维+bfs)

    传送门 给定nnn个长mmm位的二进制串 求一个二进制串TTT,定义valival_ivali​是TTT与第iii个二进制串相同的位数 使得max(val1,val2....valn)max(val_ ...

  4. 牛客练习赛68 B.牛牛的算术

    牛客练习赛68 B.牛牛的算术 题目链接 题目描述 牛牛最近学习了取模是什么 于是他看到了下面这一道题: 多次询问:每次询问包含一个正整数 n 要求你输出下列结果 ∏i=1n∑j=1i∑k=1ji×j ...

  5. 牛客练习赛58 C.矩阵消除游戏

    牛客练习赛58 C.矩阵消除游戏 题目链接 题目描述 牛妹在玩一个名为矩阵消除的游戏,矩阵的大小是n行m列,第i行第j列的单元格的权值为ai,ja_{i,j}ai,j​ ,牛妹可以进行k个回合的游戏, ...

  6. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  7. 牛客练习赛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 ...

  8. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  9. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

  10. 牛客练习赛73 D 离别(线段树+右端点排序离线查询)

    牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k. 这个可以用队列或者vector来维护. 然后我们对于q个查询, ...

最新文章

  1. php dir opendir,php opendir()列出目录下文件的方法代码
  2. 微信小程序教学第三章第四节(含视频):小程序中级实战教程:下拉更新、分享、阅读标识...
  3. P1131 [ZJOI2007]时态同步
  4. ASP.NET Core微服务(六)——【redis操作】
  5. Java黑皮书课后题第3章:3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面。随即产生一个整数0或1,分别表示
  6. E: Unable to lock the administration directory (/var/lib/dpkg/)
  7. python文件输出log_Python同时向控制台和文件输出日志logging的方法
  8. oracle数据库基础知识总结,oracle数据库基础知识学习笔记
  9. 机器学习之自然语言处理——中文分词jieba库详解(代码+原理)
  10. 创建pytorch虚拟环境的版本问题
  11. 随机无梯度Frank-Wolfe方法的统一分析
  12. 全国多省市遭暴雪袭击!这些路段交通受阻!
  13. 基于qt的计算机论文,一种基于Qt的科学计算器系统 毕业论文.doc
  14. zoj 1905 Power String(后缀数组)
  15. 常用卫星遥感影像数据源
  16. linux -- 嵌入式2.6.37wifi-vnt6656移植驱动
  17. Python-编程例题
  18. 西门子主程序调用子程序_西门子PLC如何在主程序,写入调用子程序的命令?
  19. WIFI热点——bat文件创建笔记本快捷wifi技术
  20. 哈佛导师经典评论:不要轻易和少妇上床(转贴)

热门文章

  1. P3376 【模板】网络最大流【EK算法+Dinic算法解】
  2. js 判断2月份多少天
  3. WinPE制作相关知识
  4. 怎么下载正版java7_Java7中jdk的下载和安装
  5. 强大的3D音效增强神器:Boom 3D for Mac中文
  6. 双目立体视觉2——双目成像原理
  7. 2018-2019的裁员风波(程序员要有危机意识,程序员堪比娱乐圈,更新换代快)
  8. 大数据是什么?多大的数据叫大数据?
  9. android里面的USB功能-----Accessory模式
  10. Linux清空回收站