Проверка, не скрыт ли объект препятствием

Я делаю симуляцию и в настоящее время добавляю к ней препятствия. Теперь цель препятствий состоит в том, чтобы другие агенты могли прятаться за ними, где другие не могут их видеть. Однако я пытаюсь выяснить, как лучше всего проверить, если агент в поле зрения находится за препятствием и поэтому не может быть виден. Вот пример:

введите здесь описание изображения

Агент в черном не должен видеть агента в красном цвете, но должен видеть агента в желтом цвете (зеленые линии указывают поле зрения агента в черном цвете).

На данный момент мое поле зрения вычисляет только угол, под которым находятся агенты, и проверяет, находится ли этот угол в пределах поля зрения. Я смотрел на некоторые решения, которые используют разработчики игр, и читал о raycasting, однако кажется, что это очень сложно с точки зрения вычислений и не является хорошим решением для меня, поскольку у меня будут сотни агентов, отбрасывающих лучи.

Еще одна вещь, о которой я подумал, это проверка углов, которые занимает препятствие (например, от 90 до 120 градусов) обзора, и если агент находится в том же диапазоне углов, это означает, что он заблокирован препятствием (если это имеет смысл) .

Я публикую здесь, чтобы спросить, может ли кто-нибудь указать мне простое, но эффективное решение для этого, поскольку я очень новичок в таких вещах, связанных с разработкой игр.

Заранее спасибо!


person Tohmas    schedule 01.01.2013    source источник
comment
Почему это связано с java?   -  person Swapnil    schedule 01.01.2013
comment
О, извините, программа, которую я делаю, написана на Java.   -  person Tohmas    schedule 01.01.2013


Ответы (1)


Если это 2d, создайте две линии (показаны синим цветом) и проверьте расстояние между линией и агентом. Расстояние от синей линии до агента должно быть не менее радиуса агента, иначе агент будет виден. Также дайте каждой синей линии перпендикулярный «нормальный» вектор, по которому вы можете поставить точку, чтобы определить, на какой стороне линии он находится. Если это 3D, вы делаете то же самое, но используете плоскости вместо линий, и вам потребуется 4 или более плоскостей вместо 2. По сути, так выполняется отсечение усеченной пирамиды.

введите здесь описание изображения

person Steve H    schedule 01.01.2013