Учитывая начальную точку, курс, расстояние и отрезок, найдите первую точку вдоль этого заголовка, которая находится на указанном расстоянии от этого отрезка.
Я рассмотрел два случая, но не смог охватить последний.
Первый случай: уход от линии. Игнорируйте его, даже если начальная точка находится в пределах указанного расстояния.
Второй случай: он пересекает линию. Я решил это с помощью триггеров и треугольников. Первоначально не рассматривал следующий случай.
Третий случай: он направляется к линии, но не пересекает ее. Я думаю, что это решит и второй случай, если все сделано правильно.
Три варианта:
Минимальное расстояние линии превышает указанное расстояние. Игнорировать это.
Минимальное расстояние линии равно указанному расстоянию. Нашел точки уже.
Минимальное расстояние линии меньше указанного расстояния. Это означает, что существует перпендикулярная линия от заголовка до конечной точки отрезка, которая меньше необходимого расстояния. Это также означает, что по обе стороны от этой перпендикулярной линии будут две линии необходимого расстояния. Один из них перпендикулярен курсу, а другой - ближе к той же конечной точке и не перпендикулярен курсу. Просто нужно найти эти точки и посмотреть, какая из них ближе к начальной точке.
Вот где я застрял сегодня. Составить его было легко, но сделать векторный расчет или еще что-то оказалось сложным.
Это можно перефразировать как:
В какое время (ы) P(t) = P0 + t*v
на расстоянии D
от отрезка L((x1,y1), (x2,y2))
?
v=(sin(heading), -cos(heading))
в моем случае.