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
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/574e9258d109b3deb8f5a952c6bf6c81800a4c45?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
追问非常感谢!如果要实现两种直径不同小球的随机分布要怎么处理?在一个固定尺寸的三维长方体空间100*100*20中,假设小球数量为50,直径为1,大球数量100,直径为2,且所有球之间不发生重叠。非常感谢了!!