https://zhixincode.com/contest/9/problem/H
题意:在三维空间给定n个球体(圆心坐标和半径),给定以原点为圆心的球的半径,求该球与这n个球体有多少公共体积。
https://blog.csdn.net/enterprise_/article/details/81624174?tdsourcetag=s_pctim_aiomsg
↑↑↑参考该大神的博客可求出相交的两个球体的公共体积,然后特判一下包含和不相交的情况即可。
重点是球冠体积公式:V=πH2(R−H3)V=\pi H^2(R-\frac{H}{3})V=πH2(R−3H​)
其中H是球冠的高,R是球冠的半径。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
const double PI = acos(-1.0);
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;}
};
double dist(point p1, point p2) {       //返回平面上两点距离return sqrt((p1 - p2)*(p1 - p2));
}
struct sphere {//球double r;point centre;sphere() {}sphere(point c,double rr) {centre=c;r=rr;}
}arr[110];
double SphereInterV(sphere a, sphere b) {double d = dist(a.centre, b.centre);//球心距double l1 = ((a.r*a.r - b.r*b.r) / d + d) / 2.0;double l2 = d - l1;double x1 = a.r - l1, x2 = b.r - l2;//分别为两个球缺的高度double v1 = PI*x1*x1*(a.r - x1 / 3.0);//相交部分r1圆所对应的球缺部分体积double v2 = PI*x2*x2*(b.r - x2 / 3.0);//相交部分r2圆所对应的球缺部分体积double v = v1 + v2;//相交部分体积return v;
}int n,T;
int main()
{int t=1;scanf("%d",&T);while(T--){memset(arr,0,sizeof(arr));double xx,yy,zz,re,ans=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lf%lf%lf%lf",&xx,&yy,&zz,&re);point p(xx,yy,zz);sphere sp(p,re);arr[i]=sp;}scanf("%lf%lf%lf%lf",&xx,&yy,&zz,&re);point pc(xx,yy,zz);sphere sc(pc,re);for(int i=1;i<=n;i++){if(dist(sc.centre,arr[i].centre)+arr[i].r<=sc.r) ans+=4.0/3.0*PI*arr[i].r*arr[i].r*arr[i].r;else if(dist(sc.centre,arr[i].centre)>=arr[i].r+sc.r) ans+=0;else ans+=SphereInterV(sc,arr[i]);}printf("Case #%d: %.20lf\n",t,ans);t++;}return 0;
}

Wannafly Winter Camp 2019 Day2 H Cosmic Cleaner (球体相交体积(球冠体积公式))相关推荐

  1. CCPC-Wannafly Winter Camp Div2 Day2 自闭总结

    CCPC-Wannafly Winter Camp Day1 (Div2, onsite) 今天学了首歌 菜鸟泪 题目看错整场错 投身竞赛为了生活 菜鸡也是人 AC不了向谁说 为了奖牌的逼迫 颗颗泪水 ...

  2. 阔力梯的树(2020 CCPC Wannafly Winter Camp Day2 Div.12 )dsu on tree

    题解: dsu on tree dsu on tree的基本步骤就不说了 看到这题询问结点的子树问题,而且询问时离线的,首先想到的dsu on tree的这个trick. 本题的难题就是如何维护结点所 ...

  3. 2019 wannafly winter camp day5-8代码库

    目录 day5 5H div2 Nested Tree (树形dp) 5F div2 Kropki (状压dp) 5J div1 Special Judge (计算几何) 5I div1 Sortin ...

  4. 2020 CCPC Wannafly Winter Camp Day2 Div.12——A 托米的字符串【构造、数学】

    题目传送门 题目描述 托米有一个字符串,他经常拿出来玩.这天在英语课上,他学习了元音字母 a , e , i , o , u {a,e,i,o,u} a,e,i,o,u 以及半元音 y {y} y . ...

  5. 【CCPC-Wannafly Winter Camp Day4 (Div1) H】命命命运(概率DP)

    点此看题面 大致题意: 有\(6\)个人玩大富翁,共有\(n\)块地,进行\(500\)轮,已知每个人掷骰子掷出\(1\sim6\)的概率.当某人到达一块未被占领的地时,他可以占领它.求最后每个人占有 ...

  6. 2020 CCPC Wannafly Winter Camp Day3 部分题解(ACEFG)

    查看题目 A 黑色气球 题意: n个气球,每个气球高度为正整数.给你每两个气球之间的高度和,还原出所有气球的高度,保证答案唯一. 解题思路: 签到题,因为高度的范围不大,直接枚举第一个气球的高度,检测 ...

  7. Wannafly Winter Camp Day 3 G排列(贪心)

    思路来源 jls%%% 题解 赛后补队友AC的水题可还行 最先出现的单减子序列对应的位置,一定是那些最小值的位置 先把那些放满,剩下的贪心选使字典序最小,就把剩下的从前到后扫一遍从小到大放 代码 #i ...

  8. 2020 CCPC Wannafly Winter Camp Day6 M—自闭——模拟

    链接:https://ac.nowcoder.com/acm/contest/4137/M 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  9. 2020 CCPC Wannafly Winter Camp Day7 K 修炼

    题意: 一个游戏,规则如下: 有六个值 v 1 , v 2 , a 1 , a 2 , b 1 , b 2 v_1,v_2,a_1,a_2,b_1,b_2 v1​,v2​,a1​,a2​,b1​,b2 ...

  10. 2019年 CCPC-Wannafly Winter Camp 总结及感悟

    比赛网站:传送门 一.得到的知识训练 1. dp ①直接dp 数据范围很小(n<=100) 且符合动态规划的题目特征可直接暴力dp,直接用多维(一般三维以上)状态.多重(一般三重以上)for循环 ...

最新文章

  1. Apache+PHP+MySQL+phpMyAdmin+WordPress搭建
  2. oracle电子商务套件视频,Oracle电子商务套件培训 Oracle EBS R12 制造模块培训视频教程 Oracle管理套件教程...
  3. 第一个ilasm程序
  4. python中subprocess_Python中subprocess学习
  5. Qt 【widget如何铺满窗口】
  6. 自定义Windows性能监视器
  7. 2018上半年软件设计师上午题参考答案
  8. PropertyGrid中的枚举显示为中文(转)
  9. 【数据分析】Python-NumPy模块的使用
  10. 对计算机专业的认识500字_【热门】我的朋友作文500字4篇
  11. 写作一篇SCI的13个要点(也适用社会科学SSCI)
  12. 安装oracle bi apps,Oracle BI Apps 11.1.1.7.1 系统安装(十一,配置ODI)
  13. mysql数据恢复或数据找回方法
  14. 解决vcard乱码批量导入outlook
  15. ADRC自抗扰控制学习
  16. 【将列表中的每个数据转换成倒数 np.reciprocal()】
  17. 前端Javascript第一天知识点:数据类型(重要)
  18. 植物大战僵尸_修改存档和金钱
  19. 使用print.js进行分页打印
  20. 下载公司 svn 项目后启动报错之 uniapp no such file or direc

热门文章

  1. 东京通勤概况及奥运会交通措施
  2. PVE7 GPU卡直通
  3. S7-200 SMART间接寻址功能说明(指针的使用)
  4. 透镜成像原理,眼球成像原理,小孔成像原理
  5. 研究生学习生活日记——slow down
  6. origin柱状图坐标标签_origin菜鸟求助。如何做横坐标连续(如下图)的柱状图?...
  7. Glide原生方法加载圆形图片
  8. python 进化树_7款物种分类(进化树地位)信息检索工具使用方法
  9. ffmpeg 图片合成视频黑屏 不兼容问题合成MP4
  10. 读《股票大作手回忆录》