2016-03-28 3 views
1

Я ищу способ изолировать координату x и/или окружности в круге, как показано на изображении.Matlab - выделение x/y значений окружности в круге

enter image description here

Мне нужно изолировать это так я могу установить условие, когда мяч попадает в круг, я могу изменить некоторые свойства шара, я был в состоянии сделать это для внешнего круга, который сосредоточена на [0 0], используя приведенный ниже код,

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

, но не могу понять, как сделать это для внутренних кругов.

Благодаря

+0

Что вы знаете о внутренних кругах? Центр? Радиус? –

+0

Он помогает другим пользователям, и, как правило, [отметить ответы (ссылка)] (http://stackoverflow.com/help/someone-answers), которые вы получили по этому вопросу. – zdim

ответ

3

Если вы знаете, центр и радиус внутренних окружностей вы способны вычислить X и Y координаты окружностей, то вы можете использовать функцию inpolygon для thest, если точка находится внутри circle (inpolygon возвращает 1, если точка внутри полигона, 0 в противном случае). В этом случае полигон состоит из точек окружностей.

В следующем коде точка перемещается по трем кругам (две из них расположены внутри большего).

Функция inpolygon используется для проверки того, находится ли точка (мяч) внутри круга и изменяет ее цвет в соответствии с кругом, в котором он находится.

% 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

Надеется, что это помогает.

Qapla '