Check the overlap between circles

1 vue (au cours des 30 derniers jours)
shdotcom shdotcom
shdotcom shdotcom le 26 Sep 2018
This code is to check the overlap between circles, is it possible to do this without for loop?
function pairs = checkOverlap(circles, rads)
%circles : circles matrix [x, y]; each row represents a circle;
rads : radius of each circle
ncircles = size(circles,1);
for i=1:ncircles -1
% distances between circles:
dx = bsxfun(@minus, circles(i,1), circles(i+1,1));
dy = bsxfun(@minus, circles(i,2), circles(i+1,2));
sumr(i) = bsxfun(@plus, rads(i,1), rads(i+1,1));
% distance between centers:
dist(i) = sqrt(dx.^2 + dy.^2);
end
% pairs that have overlap:
pairs = find(dist < sumr);
end
Run:
circles = rand(5, 2); % 5 circles
rads = rand(5,1); % 5 radius
Isoverlap = checkOverlap(circles, rads);

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 26 Sep 2018
Modifié(e) : Andrei Bobrov le 8 Oct 2018
EDIT
rad2 = rads(:) + rads(:)';
dxy = sqrt( (xy(:,1) - xy(:,1)').^2 + (xy(:,2) - xy(:,2)').^2 );
lo = dxy <= rad2;
lo(1:size(xy,1)+1:end) = false;
intersecting_circles = find(any(lo,2));
  1 commentaire
shdotcom shdotcom
shdotcom shdotcom le 26 Sep 2018
Modifié(e) : shdotcom shdotcom le 26 Sep 2018
Thank you very much for your answer. However, I could not understand the content of out. The output should be the indices of overlapped circles.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur General Applications dans Help Center et File Exchange

Produits


Version

R2017a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by