什么是球冠和球缺

如上图,是一个以  点为球心, 为半径,截去下半部分的球冠,它的表面积和体积公式如下:

如果我们可以得到  和  的值,那么我们就可以知道这个球缺的表面积和体积,所以对于球相交的表面积和体积这类问题,只要求出  ,基本上就做完啦。

我们已知两个球的球心和半径,需要求两个球的表面积并/体积。

显然两个球相交的相交部分是两个球缺,所以我们只需要求出这两个球的球缺的表面积/体积,就可以算出答案,要求出球缺的表面积/体积,并且已知球的半径  ,显然只需要求出球缺的高  就可以了。

下面我以求 球  的高  为例,先求出圆心之间的距离  ,已知 ,由  和余弦定理,可以求出  的值,然后由直角三角形  可以求出线段  的长度 ,最后 

然后用两个球的总表面积/体积 减去 两个球缺的总表面积/体积 就可以得到答案了。

注意,一般这样的题目要先判断两个球的关系是 内含、相交,还是外离。若内含或外离,直接输出答案即可。

牛客小白月赛20 C

球的表面积并

Code:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const double PI = acos(-1.0);
struct point
{double x;double y;double z;
};
struct circle
{point o;double r;
} a, b;
double getlen(point a, point b)
{double ans = 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));return ans;
}
int main()
{scanf("%lf%lf%lf%lf", &a.o.x, &a.o.y, &a.o.z, &a.r);scanf("%lf%lf%lf%lf", &b.o.x, &b.o.y, &b.o.z, &b.r);assert(-100000 <= a.o.x && a.o.x <= 100000);assert(-100000 <= a.o.y && a.o.y <= 100000);assert(-100000 <= a.o.z && a.o.z <= 100000);assert(0 < a.r && a.r <= 100000);assert(-100000 <= b.o.x && b.o.x <= 100000);assert(-100000 <= b.o.y && b.o.y <= 100000);assert(-100000 <= b.o.z && b.o.z <= 100000);assert(0 < b.r && b.r <= 100000);if (a.r > b.r)swap(a, b);double dis = getlen(a.o, b.o);if (dis + a.r <= b.r){double r = max(a.r, b.r);double ans = 4 * PI * r * r;printf("%.6lf", ans);}else if (dis < a.r + b.r && dis + a.r > b.r){double angle_cosa = (a.r * a.r + dis * dis - b.r * b.r) / (2 * a.r * dis);double angle_cosb = (b.r * b.r + dis * dis - a.r * a.r) / (2 * b.r * dis);double len_a = a.r - a.r * angle_cosa;double len_b = b.r - b.r * angle_cosb;double ans = 4 * PI * (a.r * a.r + b.r * b.r);ans -= 2 * PI * (a.r * len_a + b.r * len_b);printf("%.6lf", ans);}else{double ans = 4 * PI * (a.r * a.r + b.r * b.r);printf("%.6lf", ans);}
}

Wannafly winter camp 2019 day2 H

球的体积并

code:

#include <bits/stdc++.h>
const double PI = acos(-1.0);
using namespace std;
struct node
{double x;double y;double z;double r;
}que[105], o;
double calc(node o, node t)
{if (o.r < t.r)swap(o, t);double dis = sqrt((o.x - t.x)*(o.x - t.x) + (o.y - t.y)*(o.y - t.y) + (o.z - t.z)*(o.z - t.z));if (dis <= o.r - t.r){return 4.0 / 3 * PI * t.r * t.r * t.r;}else if (dis <= o.r){double angleb = acos((t.r*t.r + dis * dis - o.r*o.r) / (2 * t.r * dis));double anglea = PI - angleb;double l = t.r*cos(anglea);double H = o.r - l - dis;double h = t.r - l;return 4.0 / 3 * PI * t.r * t.r * t.r - PI / 3 * (3 * t.r - h)*h*h + PI / 3 * (3 * o.r - H)*H*H;}else if (dis < o.r + t.r){double angler = acos((t.r*t.r + dis * dis - o.r*o.r) / (2 * t.r * dis));double angleR = acos((o.r*o.r + dis * dis - t.r*t.r) / (2 * o.r * dis));double H = o.r - o.r * cos(angleR);double h = t.r - t.r * cos(angler);return PI / 3 * (3 * t.r - h)*h*h + PI / 3 * (3 * o.r - H)*H*H;}return 0;
}
int main()
{int t, n, cas = 1;scanf("%d", &t);while (t--){scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%lf%lf%lf%lf", &que[i].x, &que[i].y, &que[i].z, &que[i].r);scanf("%lf%lf%lf%lf", &o.x, &o.y, &o.z, &o.r);double ans = 0;for (int i = 0; i < n; i++)ans += calc(o, que[i]);printf("Case #%d: %.6lf\n", cas++, ans);}
}

球相交的表面积并/体积并相关推荐

  1. 计算圆,球,圆锥,圆柱的表面积与体积

    上机内容:编写程序计算圆,球,圆锥,圆柱的表面积与体积 上机目的:设计程序验证语法规则 /* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved ...

  2. 创建类MyMath,计算圆的周长、面积和球的表面积、体积,结果保留两位小数。若输入的是非数字,则输出:请输入数字!提示:要引入math包。

    """ 创建类MyMath,计算圆的周长.面积和球的表面积.体积,结果保留两位小数.若输入的是非数字,则输出:请输入数字!提示:要引入math包. 结果如下,请输入半径: ...

  3. python计算圆柱的体积_圆柱与球相交体体积计算及扩展问题

    摘要这篇文章将会画出圆柱与球相交得到的立体的样子和圆柱与圆柱相交得到立体的样子,并求出他们的体积. 文章目录(Table of Contents) 问题来源 最近在一本书上看到要求x^2 + y^2 ...

  4. 求圆的面积,周长,球的表面积,体积,圆柱的体积

    /* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:解晓东 * 完成日期:2012 年 10 月 26 日 * 版 本 号: ...

  5. C语言:输入一个数,输出以该值为半径的圆面积,以该值为半径的球体表面积与体积,pi取值3.1415926536.

    编程实现:输入一个数,输出以该值为半径的圆面积,以该值为半径的球体表面积与体积,pi取值3.1415926536. #define pi 3.1415926536 #include <stdio ...

  6. 四面体的表面积_四面体表面积与体积的平分

    四面体表面积与体积的平分 王明飞 [摘 要] @@ 引题如图 1, 在四面体 ABCD 中 , 截面 AEF 经过四面体的内切球的球 心 O, 且与 BC,DC 分别截于 E,F, 如果截面将四面体分 ...

  7. Python学习4:计算几何形状的表面积与体积

    输入一个表示几何形状名称的字符串,再在一行内输入这种图形的数据,根据表示名称的字符串选择合适的公式计算几何形状的(表)面积和体积,若为二维图形,只计算面积,若为三维图形,计算其表面积与体积,结果严格保 ...

  8. 射线与圆、球相交检测

    射线与圆.球相交检测 本篇讨论2D中射线和圆的相交检测,本方法同样适用于3D中射线和球的相交检测,这是因为可以在包含射线和球心的平面中进行检测,从而将3D问题转化为2D问题.如果射线穿过球心,那么平面 ...

  9. JavaScript实现求长方体表面积与体积

    JavaScript实现求长方体表面积与体积 一.思路 1.首先,长方体的长.宽.高是输入的,所以先获取在输入区输入的长宽高的值,赋值给定义的新的变量来储存获取的值: 2.将变量进行相应的运算,赋值给 ...

  10. 求长方体表面积与体积之比

    由键盘输入长方体的长.宽.高,求该长方体的表面积与其体积的比值(结果显示两位小数位) 输入格式 三个数,长.宽.高,以空格分隔 输出格式 比值 输入样例 1 2 3 输出样例 3.67 #includ ...

最新文章

  1. python列表的实现原理_Python列表对象实现原理
  2. sts引入lombok_Spring Boot中lombok的安装与使用详解
  3. java如果把字符串转成对象_Java中的重复对象:不仅仅是字符串
  4. 简易贪吃蛇c语言贴吧,熬书几个月,终于编出简易的贪吃蛇了,VS2013
  5. 《大数据》第1期“研究”——大数据管理系统评测基准的 挑战与研究进展(上)...
  6. android程序设计activity,《Android编程权威指南》之第二个activity
  7. drawforeground只有鼠标事件进入才刷新_罗技各系鼠标测评(2020年12月更新)
  8. R和Tableau平行坐标图
  9. 以太网抓包数据报头长度
  10. UVA 1637 Double Patience
  11. python输出名字和字数_Python字数和排名
  12. word中的符号无法添加(窗口变成灰色)
  13. 马斯克群发卫星造天文奇观,未来三天全国多地可见
  14. 旭辉完成2020年销售目标:还要加码广西,却在北京违规被通报
  15. 使用原始武器的现代战争
  16. 如何强制Windows在文件资源管理器中显示所有驱动器
  17. 知乎80万高赞的window10壁纸
  18. 运用Ntop监控网络流量(视频Demo)
  19. java 带根号的开平方
  20. OpenCV绘制点线

热门文章

  1. 网易云音乐黑胶会员免费领取
  2. react-native 报错 Text strings must be rendered within a <Text> component.
  3. python提升算法3_XGBOOST_docs_Scikit-LearnAPI_XGBClassifier_train参数01
  4. Springboot中Feign的使用方法
  5. 1.7 正则表达式【匹配空白字符和非空白字符】
  6. 231 订单支付 苹果内购
  7. kali渗透之取得DC-9的root权限
  8. 从bilibili下载视频,取其音频
  9. fcpx快速添加字幕 | final cut pro导入fcpxml字幕文件与视频时间对不上?我用代码搞定了
  10. 美军马赛克战三大技术优势!融入未来作战还需克服的四大难点