基本思想
- 每次随機指定一個半徑和位置,如果不和任意一個小球相交,則将其添加到可以被顯示的小球的清單中,如果某個小球添加了很多次都沒有添加成功,則停止添加
代碼
主函數
%% 随機生成互不相交的圓
figure
axis equal
hold on
% circleFcn(0, 0, 2)
maxFailCnt = 1000;
failCnt = 0;
xyl = [];
rl = [];
containerRadi = 2.9;
maxRadi = 0.4;
canAdd = true;
tic
circleFcn(0, 0, containerRadi)
while failCnt < maxFailCnt
canAdd = true;
r = rand() * maxRadi;
rA = rand() * 2 * pi;
rR = rand() * (containerRadi - r);
x = rR * cos( rA );
y = rR * sin( rA );
for ii = 1:size(xyl, 1)
if norm( xyl(ii,:) - [x y]) < rl(ii)+r
canAdd = false;
break;
end
end
if canAdd
xyl = [xyl ; x y];
rl = [rl r];
circleFcn( x, y, r );
else
failCnt = failCnt + 1;
end
end
toc
畫圓的函數
function circleFcn( x, y, r )
rectangle('position', [x-r, y-r 2*r 2*r], 'Curvature',[1 1])
end