本博客主要讨论从积分和非积分方式计算两个圆柱体交集的体积。由于博主的高数很烂,有什么不得当的地方还望大家指出来。
两个圆柱相交:

不难发现相交有两种情况,如图所示是2R<H2R的情况。
我们先暂且不考虑第二种2R>H2R>H的情况,先看第一种。把多余的地方切去,会得到这个立体图形:

这个叫做牟合方盖。通过百度不难发现它的体积公式为163R3\frac{16}{3}R^3,那么问题来了:如何证明。
先考虑它的18\frac{1}{8}体积,如下图:

单独把A图拿出来,想象有一个平面在离地为h的地方去切割这个交集。
不难证明切割出来的图形是一个正方形,边长为R2−h2−−−−−−−√\sqrt {R^2-h^2},也就是说正方形的面积是R2−h2R^2-h^2,如果是用积分的话,就根据高度来积这个面积好了,求出来1/8的体积。

18V=∫R0(R2−h2)dh=(R2∗h−13h3)|R0=23R3

\frac{1}{8} V = \int_{0}^{R} (R^2-h^2)dh = (R^2*h-\frac{1}{3}h^3)|_{0}^{R} = \frac{2}{3} R^3
积分太复杂,我们用类似于小学数学的方法,假设这个1/8体积被关在一个边长为R的正方体内,延展截面与正方体相交,可以得到正方体与圆柱交集之间的面积是 h2h^2。在另外考虑一个底面为边长为R的正方形,高为R的四棱锥,那么同样用一个平行与地面的平面区截这个棱锥,平面与顶点的距离为h;显然截面是一个正方形,面积为 h2h^2。那么不管是之前的图形还是现在的四棱柱,正方形的面积都和h一一对应而且相等,那么可以推导出来四棱柱的体积就是圆柱交集和正方体之间部分的体积。得到牟合方盖体积公式:

18V=V正方体−V四棱锥=R3−13R3=23R3

\frac{1}{8} V = V_{正方体}-V_{四棱锥} = R^3-\frac{1}{3}R^3 = \frac{2}{3}R^3
如果是第二种情况,两个圆柱体的交集不再是一个“牟合方盖”,而是牟合方盖的一部分,你可以想象成两个圆盘相交部分的体积,中间一段是一个长方体,而端点是牟合方盖的两端。

我们同样先计算1/8的体积。那么长方体长 12L=R2−H2−−−−−−−√\frac{1}{2}L = \sqrt{R^2-H^2}(H是圆柱体的高)。上端部分的体积就是牟合方盖的体积下面部分的体积,也就是

∫R0(R2−h2)dh−∫12L0(R2−h2)dh=23R3−R2∗12L+13∗(12L)3

\int_{0}^{R}(R^2-h^2)dh - \int_{0}^{\frac{1}{2}L}(R^2-h^2)dh = \frac{2}{3}R^3-R^2*\frac{1}{2}L+\frac{1}{3}*(\frac{1}{2}L)^3
加上长方体体积 12L∗(12H)2\frac{1}{2}L*(\frac{1}{2}H)^2就是整个立体图形1/8的体积。这个表达式同样可以用上面正方体锥体体积相减的方式得到,只是计算过程更麻烦。
代码如下:

#include<cstdio>
#include<cmath>
using namespace std;
const double pi = 3.14159265358979;
int main()
{double r,h;while(scanf("%lf%lf",&r,&h) != EOF){double v = 2*pi*r*r*h;if(2.0*r < h)printf("%.4lf\n",v-16*r*r*r/3);else{double l = sqrt(r*r-(h/2.0)*(h/2.0));double smouhefanggai = 2*r*r*r/3-(r*r*l-l*l*l/3);printf("%.4lf\n",v-8*(smouhefanggai+l*(h/2)*(h/2)));}}
}

两个圆柱相交的体积 UVALive 5096 Volume相关推荐

  1. 求两个球体相交部分体积,公式及推导,C++实现

    目录 公式 推导 代码 公式 两球相交分为两种情况: 第一种 大球完全包围了小球 第二种 两球相交但无完全包含关系 第一种情况的答案是显而易见的,直接求出小球体积即可 下面给出第二种情况的求解方法 V ...

  2. 趣题:求两圆柱相交部分的体积

    昨天去图书馆看趣味数学大师马丁加德纳的小册子<意料之外的绞刑>,看到了这个趣题:求两圆柱相交部分的体积(两圆柱半径都为1)(正交).要求是不用微积分,只用高中生就能看懂的简单数学.如果你难 ...

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

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

  4. C语言计算圆柱的表面积 体积

    C语言计算圆柱的表面积 体积 #include <stdio.h> int main() {float r, h, v, s;printf("请输入圆柱的半径 高"); ...

  5. 如何判断两个平面相交_初一数学下册预习第五章 相交线与平行线上

    初一数学下册预习第五章    相交线与平行线上 平面内,点与直线之间的位置关系分为两种:① 点在线上    ② 点在线外同一平面内,两条或多条不重合的直线之间的位置关系只有两种:① 相交    ② 平 ...

  6. java 圆的交点_java求两个圆相交坐标

    最近由于项目需要,根据两个圆函数求出相交的坐标.实现代码如下,另感谢两圆求交点算法实现Java代码,虽然他所贡献的代码中存在问题,但仍有借鉴意义. 1.两个圆相交的数学求法 在中学数学中我们知道,一个 ...

  7. python判断两线段是否相交_c语言 判断两直线段是否相交

    转了多人的放到一起比较!! //功能:求点在有向直线左边还是右边 //返回:0共线.1左边.-1右边 intleft_right(pointa,pointb,doublex,doubley) { do ...

  8. 数据结构与算法之复制含有随机指针节点的链表和两个链表相交的一系列问题

    数据结构与算法复制含有随机指针节点的链表和两个链表相交的一系列问题 目录 复制含有随机指针节点的链表 两个链表相交的一系列问题 1. 复制含有随机指针节点的链表 题目概述 思路:创建一个HashMap ...

  9. 如何判断两个平面相交_数学提高平面与平面垂直的判定方法是什么

    一般地,两个平面相交,如果它们所成的二面角是直二面角,就说这两个平面互相垂直.一个平面过另一个平面的垂线,则这两个平面垂直. 平面与平面垂直的判定方法 1.定义法:如果两个平面所成的二面角为90°,那 ...

最新文章

  1. 风控大咖教你四步开发风控模型
  2. Qt窗口屏幕居中显示 (ZT)
  3. IntelliJ IDEA 2021.1更新了好多实用功能,赶紧下载吧!
  4. 《C Traps and Pitfalls》 笔记
  5. Leetcode--455. 分发饼干
  6. Spring的@Configuration使用cglib代理的效果和我自己写的简单实现
  7. IOS代理的设计模式
  8. clion开发qt项目QtGui/qcolor.h: In construconstexpr QColor::QColor(int, int, int, int)’:ctor ‘1073741515
  9. 子级Repeater获取 父级Repeater 中的值
  10. codeforces 27 E. Number With The Given Amount Of Divisors(数论+dfs)
  11. win10家庭版添加组策略编辑器,禁用系统自动更新
  12. 利用vue.js实现一个砍价小程序
  13. js 闭包传参_javascript深入理解js闭包
  14. ansys 英文路径 安装失败
  15. 雨林木风 ghost win7 纯净版系统下载
  16. blender 中如何给 bpy.types.Operator 传值
  17. OpenHarmony啃论文俱乐部方法总结分析
  18. js将中国标准时间转化为年月日时分秒(yyyy-mm-dd)格式以及时间戳,日期,天数之间的转换
  19. 无胁科技-TVD每日漏洞情报-2022-12-13
  20. 国开计算机专业英语答案,2021国开河北《计算机专业英语阅读》形考任务1-4题库.docx...

热门文章

  1. tomcat的启动过程
  2. 单枪匹马的背锅侠,终于不再是一个人的军团了
  3. 广州积分入户需要满足哪些条件
  4. 项目三:声乐盒(音节+音乐)实验
  5. 线程函数参数(LPVOID Param)
  6. 【Maven】Maven的安装与下载
  7. 求可以统计网络流量的VC代码,就象是金山网镖下面的那样
  8. linux redis 日志在哪里,Redis的日志系统
  9. 模式识别:C-means(K-means)聚类算法与分级聚类(层次聚类)算法
  10. css2和css1,CSS1,CSS2选择器详解