Точки пересечения двух окружностей в MATLAB - PullRequest
1 голос
/ 09 марта 2011

Мне нужно выяснить точки пересечения двух окружностей. У меня есть центральные точки и радиус каждого круга. Мне нужно сделать это в MATLAB. Любая помощь будет оценена.

Ответы [ 4 ]

3 голосов
/ 09 марта 2011

Предположим треугольник ABC, где A и B - центры круга, а C - одна или другая точка пересечения.a, b и c - стороны, противоположные соответствующим углам.альфа, бета и гамма - это углы, связанные с A, B и C. соответственно.

Тогда b ^ 2 + c ^ 2 - 2 * b c cos (альфа)= a ^ 2.Зная альфу (или ее косинус), вы можете найти местоположение C.

A = [0 0]; %# center of the first circle
B = [1 0]; %# center of the second circle
a = 0.7; %# radius of the SECOND circle
b = 0.9; %# radius of the FIRST circle
c = norm(A-B); %# distance between circles

cosAlpha = (b^2+c^2-a^2)/(2*b*c);

u_AB = (B - A)/c; %# unit vector from first to second center
pu_AB = [u_AB(2), -u_AB(1)]; %# perpendicular vector to unit vector

%# use the cosine of alpha to calculate the length of the
%# vector along and perpendicular to AB that leads to the
%# intersection point
intersect_1 = A + u_AB * (b*cosAlpha) + pu_AB * (b*sqrt(1-cosAlpha^2));
intersect_2 = A + u_AB * (b*cosAlpha) - pu_AB * (b*sqrt(1-cosAlpha^2));

intersect_1 =
     0.66     -0.61188
intersect_2 =
     0.66      0.61188

enter image description here

2 голосов
/ 09 марта 2011

Найти уравнения кругов. Удостоверьтесь, что учитываете отрицание квадратного корня, иначе у вас будет только полукруг.

Установите уравнения двух окружностей равными друг другу.

0 голосов
/ 21 декабря 2013

Функция CIRCCIRC делает это за вас.

[xout,yout] = circcirc(x1,y1,r1,x2,y2,r2)

Это даст вам две точки пересечения.

http://www.mathworks.nl/help/map/ref/circcirc.html

0 голосов
/ 09 марта 2011

Вот простой код с использованием двух файловых обменов: первый - для рисования кругов, второй - для поиска пересечений (ссылки ниже).

clf
N=30; % circle resolution as the number of points
hold on
% draw 1st circle at (0,0) radius 5 and get X and Y data
H1=circle([0 0],5,N);
X1=get(H1,'XData');
Y1=get(H1,'YData');

% draw 2nd circle at (2,5) radius 3 and get X and Y data
H2=circle([2 5],3,N);
X2=get(H2,'XData');
Y2=get(H2,'YData');

% find intersection points
[x,y]=intersections(X1,Y1,X2,Y2,0);
% and plot them as red o's
plot(x,y,'ro')
hold off
axis equal
  1. CIRCLE
  2. Быстрые и надежные пересечения кривых

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...