John Connor
John Connor

Reputation: 41

Matlab - isolating x/y values of a circle within a circle

I am looking for a way to isolate the x and/or y coord of a circle within a circle, as shown in the image.

enter image description here

I need to isolate this so i can set a condition that when a ball enters a circle, i can change some qualities of the ball, i have been able to do this for the outer circle, which is centred at [0 0] using the code below,

while sqrt(XY(1)^2 + XY(2)^2) < 5

but cannot figure out how to do it for the interior circles.

Thanks

Upvotes: 1

Views: 568

Answers (1)

il_raffa
il_raffa

Reputation: 5190

If you know the center and the radius of the inner circles you are able to calculate the X and Y coordinates of the circles then, you can use the inpolygon function to thest if a point is inside a circle (inpolygon returns 1 if a point is inside the polygon, 0 otherwise). In this case the polygon is constitued by the points of the circles.

In the following code a point moves across three circles (two of them placed inside the bigger one).

The inpolygon function is used to test if the point (the ball) is inside a circle and in change its colour according to the circle it is inside to.

% Define the radius and centre of three circles
r1=10;
r2=3
r3=4
c1=[0 0];
c2=[3 3];
c3=[-4 -4]
% Calculate the X and Y coord of the three circles
t=0:.01:2*pi;
x=cos(t)*r1
y=sin(t)*r1
x1=cos(t)*r2+c2(1)
y1=sin(t)*r2+c2(2)
x2=cos(t)*r3+c3(1)
y2=sin(t)*r3+c3(2)
% Plot the circles
plot(x,y,'r')
hold on
plot(x1,y1,'g')
plot(x2,y2,'b')
daspect([1 1 1])
% Define the ball trajectory
mx=-10:1:10;
my=-10:1:10;
for i=1:length(mx)
   % Plot the ball: black if outside of all the circle 
   mh=plot(mx(i),my(i),'o','markerfacecolor','k','markeredgecolor','k')
   % If the ballk is inside the first circle, make it red
   if(inpolygon(mx(i),my(i),x,y))
      mh.MarkerFaceColor='r';
      mh.MarkerEdgeColor='r';
   end
   if(inpolygon(mx(i),my(i),x1,y1))
   % If the ballk is inside the second circle, make it green
      mh.MarkerFaceColor='g';
      mh.MarkerEdgeColor='g';
   end
   if(inpolygon(mx(i),my(i),x2,y2))
   % If the ballk is inside the third circle, make it blue
      mh.MarkerFaceColor='b';
      mh.MarkerEdgeColor='b';
   end
   pause(1)
end

enter image description here

Hope this helps.

Qapla'

Upvotes: 3

Related Questions