Избегание прямоугольника в Boids

Я делаю адаптацию классической симуляции Boids 80-х годов на Java. Он работает достаточно хорошо, но я пытаюсь добавить новое правило к поведению, которое заставит агентов избегать прямоугольников (стен), и я не уверен, как это сделать.

Я видел эту ветку:

https://gamedev.stackexchange.com/questions/45381/wall-avoidance-steering

Но меня смущает используемый синтаксис (например, partsList [j] -> normal) в представленном окончательном коде и то, как получить расстояние между агентом и прямоугольником, а также то, как на самом деле отогнать агентов. Однако формула имеет смысл. Может кто-нибудь объяснить мне это? Большое спасибо!

P.S. Я слежу за псевдокодом это, и я также использовал исходный код Java это в качестве ссылки.

Обновлено: Хорошо, я понимаю, почему меня смутил синтаксис, но я все еще в неведении, когда дело доходит до написания правила избегания стен.

Вы запутались в синтаксисе, потому что связанный поток написан на C++, а не на Java.

pkpnd 22.04.2018 03:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
367
1

Ответы 1

Ах, я помню 80-е, а также моделирование boids ...

Обычно в boids-подобных рулевое поведение идея состоит в том, чтобы применить поведенческую «управляющую силу» против скорости (импульса) агента. Таким образом, реализация любого заданного поведения рулевого управления сводится к поиску некоторой геометрической конструкции, которая генерирует вектор, указывающий в том направлении, в котором вы хотите повернуть. В идеале это будут тангенциальные усилия рулевого управления (перпендикулярные текущей скорости), чтобы рулевое управление не зависело от управления скоростью.

В случае избегания стены - а прямоугольник можно представить как четыре стены - общая идея состоит в том, чтобы взять вектор, направленный от стены (перпендикулярно). Используя проекцию (скалярное произведение), вы можете разделить компоненты этой силы, которые являются параллельно и перпендикулярно вектором скорости. Компонент нормали к стене, перпендикулярный скорости агента, представляет собой управляющую силу, которая отворачивает агента от стены.

Другой аспект - знать, когда использовать это поведение избегания стен. Полезный подход - выбрать временной горизонт, скажем, 2 секунды, и решить, ударит ли агент стену за это время. Используя текущее положение, скорость и это значение времени, вы можете сделать простое линейное предсказание того, где будет агент через 2 секунды. Если он пересекает стену в течение этого интервала, то он должен использовать свое поведение избегания стены.

Для получения дополнительной информации найдите «сдерживание» в этом Бумага GDC 99 и / или посмотрите на них: http://natureofcode.com/book/chapter-6-autonomous-agents/https://gamedevelopment.tutsplus.com/series/understanding-steering-behaviors--gamedev-12732

Другие вопросы по теме