2017-01-31 6 views
0

극좌표로 작성된 원과 원 사이의 교차점을 찾는 방법이 있는지 궁금합니다. MATLAB : 원과 선 사이의 교차점 (극좌표)

% Line 
x_line = 10 + r * cos(th); 
y_line = 10 + r * sin(th); 
%Circle 
circle_x = circle_r * cos(alpha); 
circle_y = circle_r * sin(alpha); 

지금까지 나는 어떤 성공없이 intersect(y_line, circle_y) 기능을 사용하려고했습니다. 나는 상대적으로 MATLAB에 익숙하지 않으므로 나에게 맨손이다. a=10 이외의 값을 사용할 수 있도록 내가 아래 일반화 한

답변

1

... 우리는 교차로, 그래서 xl = xc을 원하는

a = 10; % constant line offset 
th = 0; % constant angle of line 
% rl = ?? - variable to find 

% Coordinates of line: 
% [xl, yl] = [ a + rl * cos(th), a + rl * sin(th) ]; 

rc = 1; % constant radius of circle 
% alpha = ?? - variable to find 

% Coordinates of circle: 
% [xc, yc] = [ rc * cos(alpha), rc * sin(alpha) ]; 

, 두 방정식의 yl = yc

% a + rl * cos(th) = rc * cos(alpha) 
% a + rl * sin(th) = rc * sin(alpha) 

광장 양쪽 그들을 합한다. 단순화 sin(a)^2 + cos(a)^2 = 1. 브래킷을 확장하고 더 단순화하는 것은

% rl^2 + 2 * a * rl * (cos(th) + sin(th)) + 2 * a - rc^2 = 0 

지금 당신이 rl의 값을 얻기 위해 차 공식을 사용할 수 있습니다.

시험 판별 :

dsc = (2 * a * (cos(th) + sin(th)))^2 - 4 * (2 * a - rc^2); 
rl = []; 
if dsc < 0 
    % no intersection 
elseif dsc == 0 
    % one intersection at 
    rl = - cos(th) - sin(th); 
else 
    % two intersection points 
    rl = -cos(th) - sin(th) + [ sqrt(dsc)/2, -sqrt(dsc)/2]; 
end 

% Get alpha from an earlier equation 
alpha = acos((a + rl .* cos(th)) ./ rc); 

지금 당신은 각 라인에 대한 특정 알려 지거나 알려지지 않은 값에서 원 라인의 교차점, 0, 1 또는 2 포인트가 있습니다. 본질적으로 이것은 방정식입니다. 수학의 기초로이 기사의 시작 부분을보십시오 https://en.wikipedia.org/wiki/System_of_linear_equations

0

수치 적으로해야합니까? 이 문제는 쉽게 분석 솔루션 것 :

=> 200+r^2 + 2*r*(cos(th)+sin(th)) == R^2

< =>r^2 + 2*r*sqrt(2)*sin(th+pi/4) + 200 - R^2 = 0

(10+r*cos(th))^2 + (10+r*sin(th))^2 == R^2

< IFF 반경 R와 원의 포인트 (10 + r*cos(th),10 + r*sin(th))입니다있는 r의 2 차 방정식입니다. 판별자가 양수인 경우 두 개의 교차점에 해당하는 두 가지 해결 방법이 있으며 그렇지 않으면 아무 것도 없습니다.

수학을 계산하면 교차 조건은 100*(sin(2*th)-1)+circle_r^2 >= 0이고 뿌리는 -10*sqrt(2)*sin(th+pi/4)*[1,1] + sqrt(100*(sin(2*th)-1)+circle_r^2)*[1,-1]입니다.

다음은 th = pi/3 및 circle_r = 15에 대한 예제로서의 Matlab 플롯입니다. 마젠타 마커는 위의 방정식을 사용하여 닫힌 형태로 계산됩니다.

Matlab plot for circle_r = 15, th = pi/3

+0

나를 수학에 이겼습니다! – Wolfie