求助~MATLAB中画小球的随机分布

在一个固定尺寸的三维长方体空间100*100*20中,如何将一定数量的小球随机分布到这个空间内,假设小球数量为50,直径为1,且小球之间不发生重叠,达到下面的效果。真的非常感谢!!

function spheres
clc,clear;
n=50;  %球的个数
x1=0;x2=100;  %x轴范围
y1=0;y2=100;  %y轴范围
z1=0;z2=20;   %z轴范围
r=2;   %球的半径
A=[x2-x1;y2-y1;z2-z1];
A=A-2*r;
centre=zeros(3,n-1);%保存圆心坐标
for i=1:n
    c=rand(3,1);
    c=c.*A; %圆心坐标
    c=c+[x1;y1;z1]+r;
    if i==1
        [x,y,z]  = ellipsoid(c(1),c(2),c(3),r,r,r);
        surf(x,y,z,ones(size(x))) %画出来球
        hold on
    else
        s=0;
        while(s==0)
            c=rand(3,1);
            c=c.*A;    %圆心坐标
            c=c+[x1;y1;z1]+2;
            s=judge(i,c,centre,r);   %判断圆心是否可以  即新画出的球不会与之前的重叠
        end
        [x,y,z]  = ellipsoid(c(1),c(2),c(3),r,r,r);
        surf(x,y,z,ones(size(x))) %画出来球
        hold on
    end
    
end

axis([0 100 0 100 0 20]);
function s=judge(i,c,centre,r)
for j=1:i-1
    temp=centre(:,j);
    f=c-temp;
    d=norm(f,2);
    if d<2*r
        s=0;  %表示新圆心不可以在c表示的点
       return
    end
end
s=1;%表示新圆心可以

这里的半径 r=2  你可以在第七行设置为1 

追问

非常感谢!如果要实现两种直径不同小球的随机分布要怎么处理?在一个固定尺寸的三维长方体空间100*100*20中,假设小球数量为50,直径为1,大球数量100,直径为2,且所有球之间不发生重叠。非常感谢了!!

温馨提示:答案为网友推荐,仅供参考