РЕДАКТИРОВАТЬ Я ищу один или два лайнера, которые делают то, что предлагает ответ с большим количеством голосов.
Мне нужно решить небольшую проблему в очень реальном программном обеспечении, и я ищу простой способ ее решения.
У меня есть две фиксированные точки на экране (они фиксированные, но я заранее не знаю их положение), которые не находятся в одном месте. Эти две неподвижные точки образуют воображаемую линию. Теперь у меня есть третья точка, которая находится «на одной стороне» этой линии (она не может быть на линии). Пользователь может захватить точку (пользователь фактически захватывает объект, который я отслеживаю, по его центру, который представляет собой интересующую меня точку) и перетащить его. Но он не может «пересечь» воображаемую линию. Как проще всего определить, пересекает ли пользователь воображаемую линию?
Баллов может быть:
a[] = new int { 30, 50};
b[] = new int { 0, 100 };
c[] = new int { 20, 22 };
Примеры (не соответствующие пунктам выше):
/
a
c /
/
/ (c cannot be dragged here)
b
/
Или:
c
---b--------------c--- -- -- -- - -
(c cannot be dragged here)
Так что же легко определить, если c находится на правильной «стороне» линии (я рисую здесь сегменты, но это действительно можно рассматривать как линию)?
Один из способов обнаружить это - взять точку назначения d и посмотреть, пересекается ли отрезок (c, d) с линией (a, b), но разве нет более простого пути? Разве я не могу просто сделать здесь магию 2D-точечного продукта, и мне понадобится один или два лайнера для решения моей проблемы?