Отрезки линии от точки

У меня есть точка p и 2 отрезка в 2D-плоскости. Точка p — это точка обзора, откуда камера смотрит на сегменты линии. Я хочу проверить, частично или полностью скрыт отрезок 1 за линией 2, если смотреть из точки P.


person Zinx    schedule 19.11.2009    source источник
comment
Как определяются ваши линии? Уравнение (ax+by+c=0) или координаты ((x1,y1)-(x2,y2))?   -  person Artelius    schedule 19.11.2009


Ответы (2)


Я думаю, вопрос в том, «маскируется» ли вторая строка первой строкой.

Допустим, точка вашей камеры — C, а ваши сегменты — A1, A2 и B1, B2.

Я бы вычислил перекрестные произведения CA1xCB1 и CA2xCB2. Знак показывает, находится ли точка, если точка B1 находится слева или справа от линии CA1. Это зависит от того, как ориентированы ваши треугольники CA1A2 и CB1B2 (они должны быть ориентированы одинаково, это можно сделать разными способами).

Затем вы можете использовать знак, чтобы узнать, находитесь ли вы в следующих случаях:

  • CA1xCB1 отрицательный или CA2xCB2 положительный, затем частично видимый
  • наоборот, затем скрыто.

Вы также можете вычислить CA1xCB2 и CA2xCB1, чтобы получить детализированные случаи.

person slurdge    schedule 19.11.2009
comment
да, это в основном проверка, есть ли разделяющая ось между обеими точками в l1 и обеими в l2. - person jk.; 19.11.2009

ответ slurdge - хорошее начало, но все немного сложнее.

Если отрезок 2 ближе к C, чем отрезок 1, он все равно может быть виден, например.

A1-------A2

  B1-B2


   C

Здесь B1 и B2 находятся «внутри» сектора A1A2, но не скрыты.

Сложнее всего решить, находится ли B1 «между» A1 и A2, но ближе к камере, а B2 «не между» A1 и A2, но дальше от камеры:

             B2

A1-----A2
 B1


   C

B1B2 может обрезать край сегмента линии, тем самым делая небольшую часть B1B2 скрытой (а может и нет!). Я думаю, вам нужно найти пересечение A1A2 и B1B2, чтобы проверить, действительно ли это происходит.

person Artelius    schedule 19.11.2009