У меня есть точка p и 2 отрезка в 2D-плоскости. Точка p — это точка обзора, откуда камера смотрит на сегменты линии. Я хочу проверить, частично или полностью скрыт отрезок 1 за линией 2, если смотреть из точки P.
Отрезки линии от точки
Ответы (2)
Я думаю, вопрос в том, «маскируется» ли вторая строка первой строкой.
Допустим, точка вашей камеры — C, а ваши сегменты — A1, A2 и B1, B2.
Я бы вычислил перекрестные произведения CA1xCB1 и CA2xCB2. Знак показывает, находится ли точка, если точка B1 находится слева или справа от линии CA1. Это зависит от того, как ориентированы ваши треугольники CA1A2 и CB1B2 (они должны быть ориентированы одинаково, это можно сделать разными способами).
Затем вы можете использовать знак, чтобы узнать, находитесь ли вы в следующих случаях:
- CA1xCB1 отрицательный или CA2xCB2 положительный, затем частично видимый
- наоборот, затем скрыто.
Вы также можете вычислить CA1xCB2 и CA2xCB1, чтобы получить детализированные случаи.
ответ 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, чтобы проверить, действительно ли это происходит.