天天看點

matlab在圓裡生成互不相交的小圓

基本思想

  • 每次随機指定一個半徑和位置,如果不和任意一個小球相交,則将其添加到可以被顯示的小球的清單中,如果某個小球添加了很多次都沒有添加成功,則停止添加

代碼

主函數

%% 随機生成互不相交的圓
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
           

繼續閱讀