题意

空间里有6个点,满足 ∣ P 1 A ∣ ⩾ k 1 ∣ P 1 B ∣ \left | P_1A \right | \geqslant k_1\left | P_1B \right | ∣P1​A∣⩾k1​∣P1​B∣, ∣ P 2 C ∣ ⩾ k 2 ∣ P 2 D ∣ \left | P_2C \right | \geqslant k_2\left | P_2D \right | ∣P2​C∣⩾k2​∣P2​D∣,求P1,P2各自的轨迹相交部分的体积;

思路

对于固定的k,P1,P2的轨迹构成标准的阿波罗尼斯球壳
同时,题意的k > 1,可以得知为轨迹为实心的球体,于是问题转化为求两球相交部分的体积;

将条件 ∣ P 1 A ∣ ⩾ k 1 ∣ P 1 B ∣ \left | P_1A \right | \geqslant k_1\left | P_1B \right | ∣P1​A∣⩾k1​∣P1​B∣, ∣ P 2 C ∣ ⩾ k 2 ∣ P 2 D ∣ \left | P_2C \right | \geqslant k_2\left | P_2D \right | ∣P2​C∣⩾k2​∣P2​D∣化简得:

( 1 − k 2 ) ( x p + y p 2 + z p 2 ) + x p ( 2 k 2 x 2 − 2 x 1 ) + y p ( 2 k 2 y 2 − 2 y 1 ) + z p ( 2 k 2 z 2 − 2 z 1 ) + x 1 2 + y 1 2 + z 1 2 − k 2 ( x 2 2 + y 2 2 + z 2 2 ) = 0 \left ( 1 - k^2 \right )\left ( x_p + y_p^2 + z_p^2 \right ) + x_p\left ( 2k^2x_2 - 2x_1 \right ) + y_p\left ( 2k^2y_2 - 2y_1 \right ) + z_p\left ( 2k^2z_2 - 2z_1 \right ) + x_1^2 + y_1^2 + z_1^2 - k^2\left ( x_2^2 + y_2^2 + z_2^2\right )= 0 (1−k2)(xp​+yp2​+zp2​)+xp​(2k2x2​−2x1​)+yp​(2k2y2​−2y1​)+zp​(2k2z2​−2z1​)+x12​+y12​+z12​−k2(x22​+y22​+z22​)=0

又知球的方程: x 2 + y 2 + z 2 + 2 a x + 2 b y + 2 c z + d = 0 x^2 + y^2 + z^2 + 2ax + 2by + 2cz + d = 0 x2+y2+z2+2ax+2by+2cz+d=0

可得球心坐标 ( − a , − b , − c ) \left ( -a,-b,-c \right ) (−a,−b,−c),半径 r = a 2 + b 2 + c 2 − d r = \sqrt{a^2 + b^2 + c^2 - d} r=a2+b2+c2−d ​

然后判断两个球是否相交即可;

如果相交

把立体具化成平面,黄色是相交部分在球1中的体积,利用三重积分或者二重积分算体积;
∫ ∫ ∫ d x d y d z = ∫ r − h r π ∗ ( r 2 − z 2 ) d z \int \int \int dxdydz = \int_{r - h}^{r} \pi * (r^2 - z^2)dz ∫∫∫dxdydz=∫r−hr​π∗(r2−z2)dz

或者

∫ ∫ [ r 2 − x 2 − y 2 − ( r − h ) ] d x d y = ∫ 0 2 π d Θ ∫ 0 2 r h − h 2 ( r 2 − ρ 2 − ( r − h ) ) ρ d ρ \int \int \left [ \sqrt{r^2 - x^2 - y^2} - (r - h) \right ]dxdy = \int_{0}^{2\pi }d\Theta \int_{0}^{\sqrt{2rh - h^2}}\left ( \sqrt{r^2 - \rho^2 } - \left ( r - h \right ) \right )\rho d\rho ∫∫[r2−x2−y2 ​−(r−h)]dxdy=∫02π​dΘ∫02rh−h2 ​​(r2−ρ2 ​−(r−h))ρdρ

化简可得到
V = π h 2 ( r − 1 3 h ) V = \pi h^2\left ( r - \frac{1}{3}h \right ) V=πh2(r−31​h)

最后同理得到球2部分加起来即可;

AC代码

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <string>
#include <algorithm>
#include <queue>
#include <utility>
#include <stack>
#include <map>
#include <vector>
#include <set>
#include <iomanip>
#include <unordered_map>
#define hz020 return
#define mes memset
#define mec memcpy
#define x first
#define y secondusing namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll,ll> PII;const double pi = acos(-1);
const int N = 25;
const int null = 0x3f3f3f3f,INF = 1e9;
const ll mod = 998244353;int T;
double x[4], y[4], z[4];
int k1, k2;void solve(double x1, double y1, double z1, double x2, double y2, double z2, double r1, double r2)
{double dist = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2));if (dist >= r1 + r2) printf("0.000\n");else if (dist + r2 <= r1) printf("%.3lf\n", pi * r2 * r2 * r2 * 4 / 3);else if (dist + r1 <= r2) printf("%.3lf\n", pi * r1 * r1 * r1 * 4 / 3);else{double cos1 = (dist * dist + r1 * r1 - r2 * r2) / (2 * r1 * dist), cos2 = (dist * dist + r2 * r2 - r1 * r1) / (2 * r2 * dist);double h1 = r1 - r1 * cos1, h2 = r2 - r2 * cos2;printf("%.3lf\n", pi * h1 * h1 * (r1 - h1 / 3) + pi * h2 * h2 * (r2 - h2 / 3));}
}int main()
{cin >> T;while (T --){for (int i = 0; i <= 3;i ++ ) cin >> x[i] >> y[i] >> z[i];cin >> k1 >> k2;double sq1 = k1 * k1, idx1 = 1 - sq1;//圆心 double xp1 = (sq1 * x[1] - x[0]) / idx1, yp1 = (sq1 * y[1] - y[0]) / idx1, zp1 = (sq1 * z[1] - z[0]) / idx1;double dp1 = (x[0] * x[0] + y[0] * y[0] + z[0] * z[0] - sq1 * (x[1] * x[1] + y[1] * y[1] + z[1] * z[1])) / idx1;//半径 double rp1 = sqrt(xp1 * xp1 + yp1 * yp1 + zp1 * zp1 - dp1);double sq2 = k2 * k2, idx2 = 1 - sq2;//圆心 double xp2 = (sq2 * x[3] - x[2]) / idx2, yp2 = (sq2 * y[3] - y[2]) / idx2, zp2 = (sq2 * z[3] - z[2]) / idx2;double dp2 = (x[2] * x[2] + y[2] * y[2] + z[2] * z[2] - sq2 * (x[3] * x[3] + y[3] * y[3] + z[3] * z[3])) / idx2;//半径 double rp2 = sqrt(xp2 * xp2 + yp2 * yp2 + zp2 * zp2 - dp2);solve (xp1, yp1, zp1, xp2, yp2, zp2, rp1, rp2);}hz020 0;
}

END

2021牛客暑期多校训练营2 Girlfriend(阿波罗尼斯圆 + 计算几何)相关推荐

  1. 2021牛客暑期多校训练营9

    2021牛客暑期多校训练营9 题号 题目 知识点 A A Math Challenge B Best Subgraph C Cells D Divide-and-conquer on Tree E E ...

  2. 2021牛客暑期多校训练营5

    2021牛客暑期多校训练营5 题号 题目 知识点 A Away from College B Boxes 概率 C Cheating and Stealing D Double Strings 线性d ...

  3. 2021牛客暑期多校训练营4

    2021牛客暑期多校训练营4 题号 题目 知识点 A Course B Sample Game C LCS D Rebuild Tree E Tree Xor 思维+线段树 F Just a joke ...

  4. 2021牛客暑期多校训练营3

    2021牛客暑期多校训练营3 题号 题目 知识点 A Guess and lies B Black and white C Minimum grid 二分图匹配 D Count E Math 数论+打 ...

  5. 2021牛客暑期多校训练营2

    2021牛客暑期多校训练营2 题号 题目 知识点 A Arithmetic Progression B Cannon C Draw Grids D Er Ba Game E Gas Station F ...

  6. 2021牛客暑期多校训练营1

    2021牛客暑期多校训练营1 题号 题目 知识点 难度 A Alice and Bob 博弈论 B Ball Dropping 计算几何 签到 C Cut the Tree D Determine t ...

  7. 2021牛客暑期多校训练营2,签到题CDFKI

    2021牛客暑期多校训练营2 题号 标题 已通过代码 通过率 团队的状态 A Arithmetic Progression 点击查看 6/72 未通过 B Cannon 点击查看 34/104 未通过 ...

  8. 2021牛客暑期多校训练营1, 签到题DFBG

    2021牛客暑期多校训练营1 题号 标题 已通过代码 通过率 团队的状态 A Alice and Bob 点击查看 1365/5586 通过(博弈论-打表) B Ball Dropping 点击查看 ...

  9. 【训练题66:状压暴力 | 子集dp】Greater Integer, Better LCM | 2021牛客暑期多校训练营5

    题意 Greater Integer, Better LCM | 2021牛客暑期多校训练营5 给你 a,b,ca,b,ca,b,c ,你需要找到一对 x,yx,yx,y ,满足: lcm(a+x,b ...

最新文章

  1. 2008.04.14狼图腾
  2. Spring接入RabbitMQ
  3. Jerry在2020 SAP全球技术大会的分享:SAP Spartacus技术介绍的文字版
  4. redis集群依赖ruby
  5. Sublime 的中文乱码问题
  6. Java消息服务~开发者分配的消息头
  7. Gulp构建Angularjs应用
  8. html if语句_轻量html模版渲染库 cJinja
  9. cout 数组_C++用指针访问数组元素(学习笔记:第6章 08)
  10. matlab 轴gui,MatlabüGUI学习笔记(4)——公共对象属性的轴,MatlabGUI,四,常用,之,Axes...
  11. L2-002 链表去重 (25 分)—团体程序设计天梯赛
  12. 5.6.1 Boolean类型
  13. 【opencv-python】 cv2.subtract(...)图片减法
  14. vue如何在一个组件中引用另外一个组件并使用?有两种方法
  15. 美国佐治亚大学卢国玉老师组招收计算机视觉方向全奖博士生
  16. Python+OpenCV 调用手机摄像头并实现人脸识别
  17. 大数据识别“爱”的羊毛党,拒绝那些它“恨”的羊毛党
  18. 设置图片格式为php,php实现图片格式转换
  19. [Linux Audio Driver] SM6350平台音频bring up ( 一 )
  20. 计算机考试的话语,考试祝福语简短 祝考试顺利的一句话

热门文章

  1. 写代码犹如写文章: “大师级程序员把系统当故事来讲,而不是当做程序来写” | 如何架构设计复杂业务系统? 如何写复杂业务代码?
  2. 一文让你马上了解机器学习在马蜂窝酒店聚合中的应用初探
  3. java web自学视频网盘_WEB学习路线2020完整版(附视频教程+网盘下载地址)
  4. 这里是离科学最近的地方——白春礼在国科大首届开学典礼上的致辞
  5. 我为这篇文章想了66个标题!
  6. 如何设计一个亿级消息量的 IM 系统
  7. python字符串中添加字符_Python字符串中添加、插入特定字符
  8. 人的好奇心是有多强。
  9. 关于soapUI工具调试webService接口简单示例
  10. 蓝桥杯试题 算法提高 编程求解根号3简单算法