Как найти пересечение двух эллипсов в MATLAB

Вопрос:

У меня есть два уравнения:

ellipseOne = '((x-1)^2)/6^2 + y^2/3^2 = 1';

и

ellipseTwo = '((x+2)^2)/2^2 + ((y-5)^2)/4^2 = 1';

и я построил их:

ezplot(ellipseOne, [-10, 10, -10, 10])
hold on
ezplot(ellipseTwo, [-10, 10, -10, 10])
title('Ellipses')
hold off

Теперь я пытаюсь найти пересечение двух эллипсов. Я пробовал:

intersection = solve(ellipseOne, ellipseTwo)
intersection.x
intersection.y

чтобы найти точки, где они пересекаются, но MATLAB дает мне матрицу и уравнение в качестве ответа, который я не понимаю. Может ли кто-нибудь указать мне в правильном направлении, чтобы получить координаты пересечения?

Лучший ответ:

Решение находится в символической форме. Последний шаг, который вам нужно сделать, – преобразовать его в числовое. Просто преобразуйте результат с помощью double. Однако, поскольку это пара квадратичных уравнений, существует 4 возможных решения из-за неоднозначности знака (т.е. +/-) и, возможно, дает мнимые корни. Таким образом, изолируйте реальные решения и оставшиеся должны быть вашими ответами.

Следовательно:

% Your code
ellipseOne = '((x-1)^2)/6^2 + y^2/3^2 = 1';
ellipseTwo = '((x+2)^2)/2^2 + ((y-5)^2)/4^2 = 1';
intersection = solve(ellipseOne, ellipseTwo);

% Find the points of intersection
X = double(intersection.x);
Y = double(intersection.y);
mask = ~any(imag(X), 2) | ~any(imag(Y), 2);
X = X(mask); Y = Y(mask);

Первые три строки кода – это то, что вы сделали. Следующие четыре строки извлекают корни в числовой форме, затем я создаю маску logical, которая изолирует только те точки, которые являются реальными. Это рассматривает мнимую часть как координаты X, так и Y всех корней, и если для любого из корней есть такая компонента, мы хотим их устранить. Наконец, мы удалим корни, которые являются мнимыми, и нам следует оставить два вещественных корня.

Таким образом, мы получаем для наших точек пересечения:

>> disp([X Y])
   -3.3574    2.0623
   -0.2886    2.9300

Первый столбец – это координата X, а второй столбец – координата Y. Это также, похоже, согласуется с сюжетом. Я возьму ваш код построения эллипса, а также вставлю точки пересечения в виде синих точек, используя указанное выше решение:

ezplot(ellipseOne, [-10, 10, -10, 10])
hold on
ezplot(ellipseTwo, [-10, 10, -10, 10])
% New - place intersection points
plot(X, Y, 'b.');
title('Ellipses');
hold off;

введите описание изображения здесь

Оцените статью
TechArks.Ru
Добавить комментарий