Нахождение пересечения эллипса с другим эллипсом при вращении обоих

Уравнение первого эллипса=>

(((x*cos(A)+y*sin(A)-H1)^2)/(a1^2))+(((x*sin(A)-y*cos(A)-K1)^2)/(b1^2))=1

Уравнение второго эллипса=>

(((x*cos(B)+y*sin(B)-H2)^2)/(a2^2))+(((x*sin(B)-y*cos(B)-K2)^2)/(b2^2))=1

Я знаю, что эллипс пересекается в

  1. Один пункт
  2. Две точки
  3. Три точки
  4. Четыре точки
  5. Нет пересечения вообще

Есть ли общий набор уравнений для решения того же самого?


person Andikat Jacob Dennis    schedule 20.06.2013    source источник
comment
math.stackexchange.com может быть лучшим местом для этого   -  person Andreas    schedule 20.06.2013
comment
Я задал тот же вопрос там, но очень мало ответа   -  person Andikat Jacob Dennis    schedule 20.06.2013


Ответы (2)


Вы можете преобразовать эти уравнения в общую форму конического сечения:

A*x^2+2*B*x*y+C*y^2+D*x+E*y+F=0

и решить систему двух квадратных уравнений с помощью любого доступного математического пакета: Matlab, Maple, Mathematica, Mathcad, free Maxima, Derive, Octave и т. д. Решениями (точками) являются корни уравнения 4-го порядка (от 0 до 4 действительных корней).

Дополнение: Maple 6 решил эту систему, но текст решения очень-очень длинный. Кажется, вы знаете полуоси, угол поворота и центры эллипса, поэтому, возможно, стоит сделать аффинное преобразование, которое преобразует один эллипс в круг, применить это преобразование к обоим эллипсам, решить простую систему и сделать обратные преобразования.

Кленовое решение для этого случая:

solve({A*x^2+2*B*x*y+C*y^2+D*x+E*y+F=0,x^2+y^2=1},{x,y});

    {y = RootOf((4*B^2+C^2+A^2-2*A*C)*_Z^4+(2*E*C+4*D*B-2*E*A)*_Z^3+(D^2-4*B^2+E^2+2*F*C-2*A*F+2*A*C-2*A^2)*_Z^2+(2*E*A-4*D*B+2*F*E)*_Z-D^2+2*A*F+F^2+A^2), 
x = -(-RootOf((4*B^2+C^2+A^2-2*A*C)*_Z^4+(2*E*C+4*D*B-2*E*A)*_Z^3+(D^2-4*B^2+E^2+2*F*C-2*A*F+2*A*C-2*A^2)*_Z^2+(2*E*A-4*D*B+2*F*E)*_Z-D^2+2*A*F+F^2+A^2)^2*A+
RootOf((4*B^2+C^2+A^2-2*A*C)*_Z^4+(2*E*C+4*D*B-2*E*A)*_Z^3+(D^2-4*B^2+E^2+2*F*C-2*A*F+2*A*C-2*A^2)*_Z^2+(2*E*A-4*D*B+2*F*E)*_Z-D^2+2*A*F+F^2+A^2)^2*C+
RootOf((4*B^2+C^2+A^2-2*A*C)*_Z^4+(2*E*C+4*D*B-2*E*A)*_Z^3+(D^2-4*B^2+E^2+2*F*C-2*A*F+2*A*C-2*A^2)*_Z^2+(2*E*A-4*D*B+2*F*E)*_Z-D^2+2*A*F+F^2+A^2)*E+A+F)/
(2*RootOf((4*B^2+C^2+A^2-2*A*C)*_Z^4+(2*E*C+4*D*B-2*E*A)*_Z^3+(D^2-4*B^2+E^2+2*F*C-2*A*F+2*A*C-2*A^2)*_Z^2+(2*E*A-4*D*B+2*F*E)*_Z-D^2+2*A*F+F^2+A^2)*B+D)}
person MBo    schedule 20.06.2013
comment
Я пробовал математику онлайн, но она выдавала ошибку, как будто время сервера истекло. - person Andikat Jacob Dennis; 20.06.2013
comment
Я преобразовал уравнения в следующую форму Уравнение 1 => Dxy-Zx+Fx^2+Gy^2-Hy+K=0 Уравнение 2 => Mxy-Nx+Ox^2+Py^2-Qy+R=0 Но его принятие слишком много времени там. - person Andikat Jacob Dennis; 20.06.2013

Это можно сделать, найдя собственные значения симметричной матрицы 3x3 без (явного) решения квартик.

В Graphics Gems V есть статья Кеннета Дж. Хилла под названием Matrix-based Ellipse Geometry. Большая часть этой статьи доступна в книгах Google, но есть резюме автора, заархивированное в группах новостей sci.math и comp.graphics.algorithms в 1995 году. Вы можете найти его здесь — просмотрите примерно 2/3 страницы вниз.

Ключевая идея заключается в том, что если вы поместите коники, любые двумерные коники, а не только эллипсы, в матричную форму следующим образом:

        [ A  B  D ] [ x ]
[x y 1] [ B  C  E ] [ y ] = [ 0 ]
        [ D  E  F ] [ 1 ]

или transpose(X).C.X = 0, тогда вы сможете поиграть в некоторые игры. C называется характеристической матрицей коники.

Итак, если C1 и C2 — характеристические матрицы ваших эллипсов, а xi — точка пересечения, то xi — точка пересечения любой коники с характеристической матрицей C1 + lambda C2. Если в качестве собственного значения выбрана лямбда, то C1 + lambda C2 является вырожденным и может интерпретироваться как набор строк. Остается только пересечь линии, выделенные из вырожденных характеристических матриц, с исходными эллипсами и отбросить лишние решения.

person Codie CodeMonkey    schedule 08.07.2013