Как найти пересечение двух эллипсов в 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 чтобы

Вопрос:

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

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;

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