Here is a little demo you might find useful. It determines which, if any, circles overlap/intersect:
clc;
fprintf('Beginning to run %s.m ...\n', mfilename);
close all;
clear;
workspace;
format short g;
format compact;
fontSize = 20;
numCircles = 7;
xy = rand(numCircles, 2);
radii = 0.1 * rand(1, numCircles) + 0.05;
viscircles(xy, radii);
xlabel('X', 'FontSize', fontSize);
ylabel('Y', 'FontSize', fontSize);
for k = 1 : numCircles
text(xy(k, 1), xy(k, 2), num2str(k), 'FontWeight', 'bold');
end
grid on;
axis('equal');
distances = pdist2(xy, xy)
[r1, r2] = meshgrid(radii, radii)
sumOfRadii = r1 + r2
overlapping = sumOfRadii > distances;
overlapping(logical(eye(numCircles))) = false
numberOfOverlaps = sum(any(overlapping, 2));
overlappedIndexes = find(any(overlapping, 2));
if numberOfOverlaps > 0
caption = sprintf('%d circles are overlapped:', numberOfOverlaps);
for k = 1 : length(overlappedIndexes)
caption = sprintf('%s %d', caption, overlappedIndexes(k));
end
else
caption = sprintf('%d circles are overlapped', numberOfOverlaps);
end
fprintf('%s.\n', caption);
title(caption, 'FontSize', fontSize);
for row = 1 : numCircles
overlappedCircleIndexes = find(overlapping(row, :));
if ~isempty(overlappedCircleIndexes)
for k2 = 1 : length(overlappedCircleIndexes)
fprintf('Circle %d overlaps with circle %d.\n', ...
row, overlappedCircleIndexes(k2));
end
end
end
For that random set, I see:
distances =
0 0.30561 0.64619 0.32995 0.25392 0.45259 0.70397
0.30561 0 0.54554 0.19313 0.35021 0.29865 0.39959
0.64619 0.54554 0 0.36275 0.41575 0.24748 0.68878
0.32995 0.19313 0.36275 0 0.21992 0.12872 0.49327
0.25392 0.35021 0.41575 0.21992 0 0.2886 0.70892
0.45259 0.29865 0.24748 0.12872 0.2886 0 0.4981
0.70397 0.39959 0.68878 0.49327 0.70892 0.4981 0
sumOfRadii =
0.2034 0.20737 0.16735 0.2079 0.22118 0.19434 0.23533
0.20737 0.21134 0.17132 0.21188 0.22515 0.19832 0.2393
0.16735 0.17132 0.1313 0.17186 0.18513 0.1583 0.19928
0.2079 0.21188 0.17186 0.21241 0.22569 0.19885 0.23983
0.22118 0.22515 0.18513 0.22569 0.23896 0.21213 0.25311
0.19434 0.19832 0.1583 0.19885 0.21213 0.18529 0.22627
0.23533 0.2393 0.19928 0.23983 0.25311 0.22627 0.26725
overlapping =
7×7 logical array
0 0 0 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 1 0 0 1 1 0
0 0 0 1 0 0 0
0 0 0 1 0 0 0
0 0 0 0 0 0 0
4 Circles overlap.
Circle 2 overlaps with circle 4.
Circle 4 overlaps with circle 2.
Circle 4 overlaps with circle 5.
Circle 4 overlaps with circle 6.
Circle 5 overlaps with circle 4.
Circle 6 overlaps with circle 4.
Best Answer