Хорошо, у меня есть более ясное представление о проблеме сейчас, и она вдохновлена предложением @walkytalky, вот более ответный ответ.
Вы упомянули, что p1
и p2
перемещение по отрезкам прямой линии. Я не знаю, выровнены ли эти сегменты таким образом, чтобы и p1
, и p2
всегда запускали новые сегменты одновременно. Тем не менее, вы всегда можете отрезать сегмент линии на два сегмента (с одинаковым наклоном), чтобы оба p1
и p2
всегда запускали новые сегменты линии одновременно.
Предположим p1
проходит вдоль линии A-B
и p2
путешествия (одновременно) вдоль C-D
в качестве параметра t
идет от 0 до 1. (То есть, во время t=0.5
, p1
находится в середине A-B
и p2
в середина C-D
.)
позволяя Ax
и Ay
обозначают х и у координаты точки A
(и аналогично для B
, C
и D
) мы можем выразить p1
и p2
как функции t
следующим образом:
p1(t) = (Ax + t*(Bx - Ax), Ay + t(By - Ay))
p2(t) = (Cx + t*(Dx - Cx), Cy + t(Dy - Cy))
(. Например, когда t=0
, Ax + t*(Bx - Ax)
оценивающего к Ax
, и когда t=1
он оценивает в Bx
)
Чтобы найти каждый «а-вершинно это-ближнего по-между-p1-и-П2" -время мы следующее:
для каждого препятствия вершина v=(Vx, Vy)
мы должны найти t
так что p1(t)
, p2(t)
и v
соответствуют друг другу.
Это может быть сделано путем решения следующих уравнений (два уравнения и два неизвестных, t
и k
):
Vx=p1(t).x + k*(p2(t).x - p1(t).x)
Vy=p1(t).y + k*(p2(t).y - p1(t).y)`
Если k
лежит между 0 и 1, многоугольник вершина v
фактически между (расширенный) A-B
линия и (расширенный) C-D
линия. Если t
также находится между 0 и 1, то вершина v
фактически передается по линии p1-p2
в течение времени, в течение которого точки перемещаются вдоль этих сегментов (поскольку, когда t
, скажем, 1,3, точки уже будут на новых сегментах).
Как только все вычисления «a-vertex-is-through-by-between-p1-and-p2» вычисляются, это простая задача, чтобы выяснить остальное. (То есть, выяснить, если это «становится в видимости», «становление-вне поле зрения» или «ни» тип прохождения):
Для всех пар t0
и t1
последовательных вершинно время прохождения, вы проверяете, нет ли линии p1((t1-t0)/2)-p2((t1-t0)/2)
без пересечений с краем многоугольника. Если он свободен от пересечений, то точки будут на линии видимости на весь период (t0-t1
), иначе они будут скрыты из виду весь период (так как в течение этого периода времени не пропускаются никакие другие вершины).
Порог равен нулю, в противном случае решение не является точным и не удовлетворяет граничным критериям (так как вы можете выбрать что-либо в пределах неправильной границы ошибки и получить неправильный ответ). –
Я понимаю, что вы имеете в виду. – aioobe