Пересечение отрезка и эллипса

518
06 февраля 2017, 15:23

Дан отрезок из двух точек А и В (у каждой точки есть координаты).

Дан эллипс (пока что задаю верхней левой точкой, длиной и шириной, но при необходимости эти параметры можно заменить на любые другие).

Задача: узнать пересекаются ли отрезок с эллипсом. Случай, при котором отрезок полностью в эллипсе не удовлетворяет условие.

Помогите, пожалуйста, а то ничего в голову не приходит. Если возможно, то нужен код в java, если нет - дайте решение, а код напишу сам.

Answer 1

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

Пусть задан эллипс:

(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 – внутри его).

Если интересует случай с принадлежностью точек дуге эллипса, то в вышеприведенных системах неравенства будут нестрогие.

Answer 2

Из геометрии- две линии пересекаются, если для системы уравнений, описывающей эти линии, существует решение

создаем систему уравнений из 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))

далее подставляем все известные данные и получаем или не получаем точку, если получили - есть пересечение, не получили = нет

READ ALSO
Не ставится фон, свойство Background-image не работает

Не ставится фон, свойство Background-image не работает

Архив с файлами тутХотел поставить фон в header но Background-image почему то не работает, путь указал правильно пробовал фон в туже папку скинуть, что...

417
Как передать путь в событие

Как передать путь в событие

Подскажите как передать в событие путь к другому EXE-шнику

323
Свойство IsEnabled у Button

Свойство IsEnabled у Button

Свойство IsEnabled у Button я привязываю к свойству своего класса булевского типа IsCheckedНо я хочу, чтобы кнопка была доступна для нажатия, когда свойство...

382