Для пересечения отрезок линия - точка я могу найти интервал, в котором происходит столкновение (хотя этот интервал больше, чем фактическое время для столкновения):
Для данного отрезка [p, q]
, движущегося со скоростью v
, и для точки r
со скоростью w
, direction(w) != direction(v)
, определите три линии L1 = [p, p+v], L2 = [q, q+v], L3 = [r, r+w]
. Пусть t1, t_p
и t2, t_q
будут временами пересечения между L1
и L3
и между L2
и L3
соответственно. Если интервал [t1, t2]
не является взаимоисключающим с [t_p, t_q]
, то существует пересечение в пересечении этих двух интервалов (например, пересечение между [-1, 10]
и [2, 20]
равно [2, 10]
). Если эти интервалы являются взаимоисключающими, то столкновения нет.
Кроме того, если направления v
и w
одинаковы, но не имеют одинаковую длину, то вы можете найти точное время столкновения. Пусть s
будет точкой r
при проецировании на линию [p, q]
. Если эта точка находится в отрезке [p, q]
, в момент времени t1
происходит столкновение, которое можно рассчитать путем деления расстояния между точкой r
и точкой s
на относительную скорость между точкой r
и отрезок [p, q]
.
Используя интервал, можно получить оценку времени, используя метод, подобный двоичному поиску, для сравнения расстояний между сегментом и точкой в определенные моменты времени. Однако это очень неэффективно.