Check the overlap between circles
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
shdotcom shdotcom
il 26 Set 2018
Modificato: Andrei Bobrov
il 8 Ott 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);
0 Commenti
Risposta accettata
Andrei Bobrov
il 26 Set 2018
Modificato: Andrei Bobrov
il 8 Ott 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 Commento
Più risposte (0)
Vedere anche
Categorie
Scopri di più su General Applications in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!