Check the overlap between circles

5 visualizaciones (últimos 30 días)
shdotcom shdotcom
shdotcom shdotcom el 26 de Sept. de 2018
Editada: Andrei Bobrov el 8 de Oct. de 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);

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 26 de Sept. de 2018
Editada: Andrei Bobrov el 8 de Oct. de 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 comentario
shdotcom shdotcom
shdotcom shdotcom el 26 de Sept. de 2018
Editada: shdotcom shdotcom el 26 de Sept. de 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.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre 2-D and 3-D Plots en Help Center y File Exchange.

Productos


Versión

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by