ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

matlab 两个球体相交的体积

2022-05-28 02:02:18  阅读:169  来源: 互联网

标签:20 两球 相交 体积 matlab 球体 Circle ri


主要参考了一个网上的一些方法  下面是原理

设 d 为两球球心之间的距离。

1、d >= R+ri :两球不相交,即相交部分体积=0.

2、d+ri = R :小球在大球里面,即相交部分体积 = 小球体积 =  \frac{4}{3}*\pi* (ri)^{3}.

3、R-ri < d < R+ri :两球相交,相交部分体积:

设 cos\alpha = \frac{R^{2}+d^{2}-(ri)^{2}}{2*R*d} ,h1 = R*(1-cos\alpha ) .

cos\beta = \frac{(ri)^{2}+d^{2}-R^{2}}{2*ri*d}h2 = ri*(1-cos\beta ) .

V = \frac{\pi }{3}*(3*R-h1)*h1^{2}+\frac{\pi }{3}*(3*ri-h2)*h2^{2} .

 

 

 

证明:

相交部分体积是由2块构成的,分别属于两个球体。其中一块的体积公式为(以大球为例):

V=\int_{0}^{h}\pi (R^{2}-(Rcos\alpha +x)^{2})dx

=\int_{0}^{h}\pi (R^{2}-R^{2}cos^{2}\alpha -x^{2}-2Rcos\alpha x)dx

=\int_{0}^{h}\pi (R^{2}sin^{2}\alpha -x^{2}-2Rcos\alpha x)dx

= \pi (- \frac{1}{3}h^{3}-Rcos\alpha h^{2}+R^{2}sin^{2}\alpha h)

= \pi (Rh(Rsin^{2}\alpha -hcos\alpha )- \frac{1}{3}h^{3})

= \pi (Rh(R(1-cos^{2}\alpha ) -hcos\alpha )- \frac{1}{3}h^{3})

= \pi (Rh(R-Rcos^{2}\alpha -hcos\alpha )- \frac{1}{3}h^{3})

= \pi (Rh(R-cos\alpha (Rcos\alpha +h) )- \frac{1}{3}h^{3})

= \pi (Rh(R-Rcos\alpha )- \frac{1}{3}h^{3})

=\pi (Rh^{2}- \frac{1}{3}h^{3})

代码:

 1 function [] = sphere()    
 2 clc
 3 clear
 4  pi=3.1415926;
 5 Circle_A.x=0;
 6 Circle_A.y=0;
 7 Circle_A.z=0;
 8 Circle_A.r=5;
 9 % % % % % % % % % % 
10 Circle_B.x=0;
11 Circle_B.y=0;
12 Circle_B.z=5;
13 Circle_B.r=5;
14 int16 T=20;
15 int16 Case=1;
16 V=0.0;
17 d=sqrt((Circle_A.x - Circle_B.x)*(Circle_A.x - Circle_B.x) + (Circle_A.y - Circle_B.y)*(Circle_A.y - Circle_B.y) + (Circle_A.z - Circle_B.z)*(Circle_A.z - Circle_B.z));
18 if(d>=Circle_A.r+Circle_B.r)
19 V=0;
20 elseif(d+Circle_A.r<=Circle_B.r)
21 V=V+(4.0 / 3)*pi*Circle_A.r*Circle_A.r*Circle_A.r;
22 elseif(d+Circle_B.r<=Circle_A.r)
23 V=V+(4.0 / 3)*pi*Circle_B.r*Circle_B.r*Circle_B.r;
24 else
25 co = double((Circle_A.r*Circle_A.r+d*d-Circle_B.r*Circle_B.r)/(2.0*d*Circle_A.r));
26 h = double(Circle_A.r*(1-co));
27 V=V+(1.0/3)*pi*(3.0*Circle_A.r-h)*h*h;
28 co=double((Circle_B.r*Circle_B.r+d*d-Circle_A.r*Circle_A.r)/(2.0*d*Circle_B.r));
29 h=double(Circle_B.r*(1-co));
30 V=V+(1.0/3)*pi*(3.0*Circle_B.r-h)*h*h;
31 end
32 V

 

标签:20,两球,相交,体积,matlab,球体,Circle,ri
来源: https://www.cnblogs.com/rongdie/p/16319702.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有