Проверка, скрыт ли объект препятствием
Я делаю симуляцию и в настоящее время добавляю к ней препятствия. Теперь цель препятствий состоит в том, чтобы другие агенты могли спрятаться за ними там, где другие затем их не видят. Однако я пытаюсь выяснить, какой будет лучший подход, чтобы проверить, если рассматриваемый агент находится за препятствием и поэтому не может быть замечен. Вот пример:
Агент в черном не должен видеть агента в красном, но должен иметь возможность видеть агента в желтом.(Зеленые линии указывают поле зрения агента в черном)
На данный момент мое поле зрения только вычисляет угол, под которым находятся агенты, и проверяет, находится ли угол в пределах поля зрения. Я смотрел на некоторые решения, которые используют разработчики игр, и читал о приведении лучей, однако кажется, что он очень сложен в вычислительном отношении и не является хорошим решением для меня, поскольку у меня будут сотни агентов, излучающих лучи.
Еще одна вещь, о которой я думал, это проверка углов, которые препятствие занимает (например, от 90 до 120 градусов) обзора, и если агент находится в том же диапазоне углов, что и это означает, что он заблокирован препятствием (если это имеет смысл),
Я пишу здесь, чтобы спросить, может ли кто-нибудь помочь мне найти простое, но эффективное решение для этого, так как я очень новичок в подобных вещах, связанных с разработкой игр.
Заранее спасибо!
1 ответ
Если это 2d, то создайте две линии (показаны синим цветом) и проверьте расстояние между линией и агентом. Расстояние от синей линии до агента должно быть не менее радиуса агента, или агент виден. Также дайте каждой синей линии перпендикулярный "нормальный" вектор, с которым вы можете расставить точки, чтобы определить, на какой стороне линии он находится. Если это 3d, вы делаете то же самое, но используете плоскости вместо линий, и вам понадобится 4 или более плоскостей вместо 2. По сути, это то, как выполняется отбраковка усеченного конуса.