MATLAB: Points lying in the intersection of 2 circles

circlesfindintersecting pointsMATLAB

Suppose i have 2 points (x1, y1) and (x2,y2). I draw circle with radius 'r'. I want to find "all" the points which lie in the intersection region of the 2 circles.

Best Answer

clc; clear all ;
N1 = 100 ; N2 = 50 ;
th = linspace(0,2*pi,N1)' ;
r1 = 1. ; r2 = 1. ; % Radii of circles
c1 = [0 0] ; % Center of first circle
c2 = [1.5 0] ; % Center of second circle
a1 = repmat(c1,[N1 1])+[r1*cos(th) r1*sin(th)] ; % form circle 1
a2 = repmat(c2,[N1 1])+[r2*cos(th) r2*sin(th)] ; % form circle 2
%
plot(a1(:,1),a1(:,2),'r') ;
hold on
plot(a2(:,1),a2(:,2),'r') ;
axis equal
%%Get points of first circle lying in second circle
in12 = inpolygon(a1(:,1),a1(:,2),a2(:,1),a2(:,2)) ;
P1 = a1(in12,:) ;
plot(a1(in12,1),a1(in12,2),'.b') ;
%%Get points of second circle lying in first circle
in21 = inpolygon(a2(:,1),a2(:,2),a1(:,1),a1(:,2)) ;
P2 = a2(in21,:) ;
plot(a2(in21,1),a2(in21,2),'.b') ;
%%form the oval / intersection boundary
R = [P1 ;P2] ;
%%Form a suare grid around ovel region
x = linspace(c1(1),c2(1),N2) ;
y = linspace(-r1,r2,N2) ;
[X,Y] = meshgrid(x,y) ;
XX = X(:) ; YY = Y(:) ;
%%Get the points inside the region
in = inpolygon(XX,YY,R(:,1),R(:,2)) ;
plot(XX(in),YY(in),'.k') ;
Can be further refined...