将体积分配给球体

时间:2015-03-14 10:37:22

标签: matlab

我在MATLAB的一个图中生成了一系列球体(称之为 m )。然后,我正在围绕其中一些生成另一个球体(称之为 j )。

基本上,我只是想弄清楚 m 中有多少(不一定是整数) m

我认为我必须解决这个问题的方法是找出一种方法来为 m 球体分配一个音量,以便我可以计算出多少“体积”这些球体包含在 j 中。我在技术上使用这些球体的默认半径1,所以我已经知道两者的体积。问题是我正在生成大约100个 m 。我无法直观地计算它们以确切知道 j 中有多少。此外,有时只有部分 m 球体位于 j 内,这意味着我必须估计是否手动完成。

有人会有任何想法吗?我真的很感激。如果这是一个基本问题(新手MATLAB用户),我道歉...我已经尝试了几个小时才找到解决问题的方法。

我正在遵循的基本代码:

对于j

j = surfl(x*r, y*r, z*r);

对于m

for n = 1:length(position_new)
    B.index(n).location = position_new(n,:);
end 
    [x,y,z] = sphere(10);
for n = 1:length(position)
    hold on 
    m(n,1) = surfl(x-B.index(n).location(1), y-B.index(n).location(2),...
        z-B.index(n).location(3)); 
end

1 个答案:

答案 0 :(得分:0)

如果您想将音量用作衡量大球体内部小球体的大小,您可以使用此代码:

我们假设jrj_center分别是球体j的半径及其中心,而mr(i)m_centre(i)是第i个小球半径和中心。

spheres_counter = 0;
for i=1:N_spheres
   d = norm(j_center - m_center);   %distance between 2 enters
   %check if the sphere if fully inside/outside the large sphere
   if d < jr - mr(i)
       %completely inside j
       spheres_counter = spheres_counter + 1;
   else if d < jr + mr(i)
       %partially inside j
       V_intersection = pi*(jr + mr(i) - d)^2 * (d^2 + 2*d*mr(i) - 3*mr(i)^2 + 2*d*jr + 6*mr(i)*jr - 3*jr^2)/(12 * d);
       % V_intersection is the intersection volume (http://mathworld.wolfram.com/Sphere-SphereIntersection.html)
       V_m = (4/3)*pi*mr(i)^3;
       spheres_counter = spheres_counter + V_intersection/V_m; 
   end
end