牛客练习赛41 E 球的体积并
两个球的体积相加减去交就是并
#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 球的体积并相关推荐
- 解题报告(一)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_ ...
- 牛客练习赛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 ...
- 牛客练习赛73 D 离别(线段树+右端点排序离线查询)
牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k. 这个可以用队列或者vector来维护. 然后我们对于q个查询, ...
最新文章
- php dir opendir,php opendir()列出目录下文件的方法代码
- 微信小程序教学第三章第四节(含视频):小程序中级实战教程:下拉更新、分享、阅读标识...
- P1131 [ZJOI2007]时态同步
- ASP.NET Core微服务(六)——【redis操作】
- Java黑皮书课后题第3章:3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面。随即产生一个整数0或1,分别表示
- E: Unable to lock the administration directory (/var/lib/dpkg/)
- python文件输出log_Python同时向控制台和文件输出日志logging的方法
- oracle数据库基础知识总结,oracle数据库基础知识学习笔记
- 机器学习之自然语言处理——中文分词jieba库详解(代码+原理)
- 创建pytorch虚拟环境的版本问题
- 随机无梯度Frank-Wolfe方法的统一分析
- 全国多省市遭暴雪袭击!这些路段交通受阻!
- 基于qt的计算机论文,一种基于Qt的科学计算器系统 毕业论文.doc
- zoj 1905 Power String(后缀数组)
- 常用卫星遥感影像数据源
- linux -- 嵌入式2.6.37wifi-vnt6656移植驱动
- Python-编程例题
- 西门子主程序调用子程序_西门子PLC如何在主程序,写入调用子程序的命令?
- WIFI热点——bat文件创建笔记本快捷wifi技术
- 哈佛导师经典评论:不要轻易和少妇上床(转贴)