Удалить перекрывающиеся круги в MATLAB

Я написал код MATLAB, чтобы иметь возможность визуализировать некоторые круги. Пожалуйста, посмотрите на мой приведенный ниже код и прилагаемую фигуру в качестве вывода.

clc;
clear;
close all;

% X and Y of each Center
Xloc = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];
Yloc = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5];

% Radius of each circle
radius = unifrnd(0,1,[1 numel(Xloc)]);

% Random colours
allColours = rand(numel(Xloc),3);

% Transform the data into position = [left bottom width height]
pos = [Xloc(:)-radius(:) Yloc(:)-radius(:) 2*radius(:)*[1 1]];

% Create and format the axes
H = axes;
hold on;
axis equal;
box on;
set(H,'XTickLabel',[],'YTickLabel',[]);

% Create the circles
for idx = 1:numel(Xloc);
    rectangle(...
        'Position',pos(idx,:),...
        'Curvature',[1 1],...
        'FaceColor',allColours(idx,:),...
        'EdgeColor','none');
end

Выходной показатель (радиус окружностей генерируется случайным образом, поэтому, если вы выполните код, вы получите новый вывод):

круги

Как вы можете видеть на рисунке, между кругами есть пересечение. Мне было интересно, как я могу отделить центры друг от друга, чтобы не перекрывать друг друга, и в то же время они сохраняют исходное расстояние (или подобное расстояние) друг от друга в [Xloc Yloc]

1 ответ

Вы можете попытаться сформулировать проблему оптимизации:

  • Вы должны ограничить минимальное расстояние между центрами на основе желаемых радиусов.
  • Вы должны минимизировать отклонения от желаемого места в центре.
Другие вопросы по тегам