Дан отрезок из двух точек А и В (у каждой точки есть координаты).
Дан эллипс (пока что задаю верхней левой точкой, длиной и шириной, но при необходимости эти параметры можно заменить на любые другие).
Задача: узнать пересекаются ли отрезок с эллипсом. Случай, при котором отрезок полностью в эллипсе не удовлетворяет условие.
Помогите, пожалуйста, а то ничего в голову не приходит. Если возможно, то нужен код в java, если нет - дайте решение, а код напишу сам.
Вариант, с помощью которого не нужно решать уравнения (без использования численных методов):
Пусть задан эллипс:
(x-x0)^2/a^2 + (y-y0)^2/b^2 = 1
, где:
(x0;y0) – координаты центра эллипса;a и b – длины большой и малой полуосей соответственно.и отрезок AB, где A(x1;y1) и B(x2;y2).
Для того, чтобы отрезок AB пересекал заданный эллипс, необходимо и достаточно, чтобы была верна одна из систем неравенств:
(x1-x0)^2/a^2 + (y1-y0)^2/b^2 < 1
(x2-x0)^2/a^2 + (y2-y0)^2/b^2 > 1
(случай, когда точка A лежит внутри эллипса, а B – вне его);
(x1-x0)^2/a^2 + (y1-y0)^2/b^2 > 1
(x2-x0)^2/a^2 + (y2-y0)^2/b^2 < 1
(случай, когда точка A лежит вне эллипса, а B – внутри его).
Если интересует случай с принадлежностью точек дуге эллипса, то в вышеприведенных системах неравенства будут нестрогие.
Из геометрии- две линии пересекаются, если для системы уравнений, описывающей эти линии, существует решение
создаем систему уравнений из 2х
прямая = (x-xa)/(xb-xa)=(y-ya)/(yb-ya)
уравнение эллипса необходимо выбирать максимально вам подходящее, после чего в обоих уравнениях выражаете y и решаете систему
для канонического уравнения эллипса (оси эллипса совпадают с осями координат) (x^2/a^2+y^2/b^2=1)
прямая y=((x-xa)*(yb-ya))/(xb-xa)+ya
эллипс y=+-sqrt((1/b^2)-(x^2/a^2*b^2))
далее подставляем все известные данные и получаем или не получаем точку, если получили - есть пересечение, не получили = нет
Сборка персонального компьютера от Artline: умный выбор для современных пользователей