Дан отрезок из двух точек А и В (у каждой точки есть координаты).
Дан эллипс (пока что задаю верхней левой точкой, длиной и шириной, но при необходимости эти параметры можно заменить на любые другие).
Задача: узнать пересекаются ли отрезок с эллипсом. Случай, при котором отрезок полностью в эллипсе не удовлетворяет условие.
Помогите, пожалуйста, а то ничего в голову не приходит. Если возможно, то нужен код в 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))
далее подставляем все известные данные и получаем или не получаем точку, если получили - есть пересечение, не получили = нет
Доброго времени суток! Вот форма
Архив с файлами тутХотел поставить фон в header но Background-image почему то не работает, путь указал правильно пробовал фон в туже папку скинуть, что...
Свойство IsEnabled у Button я привязываю к свойству своего класса булевского типа IsCheckedНо я хочу, чтобы кнопка была доступна для нажатия, когда свойство...