我在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
答案 0 :(得分:0)
如果您想将音量用作衡量大球体内部小球体的大小,您可以使用此代码:
我们假设jr
和j_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