AnyLogic
Развернуть
Размер шрифта

Поворот анимации агента

AnyLogic поддерживает поворот фигуры анимации агента во время движения и предоставляет несколько функций, с помощью которых вы можете легко управлять поворотом фигуры.

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

Поворот анимации агента согласно направлению движения

Если у вашего агента есть анимация, и этот агент может перемещаться, то чаще всего и фигура анимации должна поворачиваться во время движения агента согласно направлению его движения. У типа агента есть соответствующая опция Поворачивать анимацию согласно направлению движения в секции свойств Размеры и движение, при выборе которой агент будет автоматически поворачиваться при движении. Поскольку это поведение востребовано в большинстве моделей, то эта опция выбрана по умолчанию.

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

Автоповорот включен Автоповорот выключен

Отключение автоповорота

В каких же случаях может потребоваться отключить автоповорот? Например, если в вашей модели анимация только двухмерная, и в качестве фигур агента вы используете пиктограммы, которые лучше смотрятся без наклона. Также - если, например, агент движется по извилистым маршрутам по ГИС карте, и при автоповороте фигура агента постоянно дергается, создавая нежелательный визуальный эффект. Или если у фигуры анимации есть текстовые подписи, и не хочется, чтобы они отображались вверх ногами.

Ниже на примере одной модели вы можете посмотреть, как выглядит анимация движения агента с включенной и выключенной опцией автоповорота. В данном случае по карте движутся автомобиль (изображаемый красной пиктограммой) и поезд (синяя пиктограмма). Для автомобиля включена опция автоповорота, а для поезда нет. Посмотрев на анимацию, вы можете сами принять решение о том, какой вариант предпочтительнее.

Вертикальный поворот анимации агента

Помимо поворота анимации агента согласно направлению движения в плоскости XY, фигура анимации также может и автоматически поворачиваться вертикально при движении. За этот тип автоповорота отвечает опция Также наклонять и вертикально, которая становится доступной при выборе объясненной выше опции Поворачивать анимацию согласно направлению движения.

Речь в данном случае идет об отклонении от вертикальной оси Z, или, если проще, то наклоне вперед или отклонении назад в случае движения по наклонной плоскости.

Проще объяснить с помощью примеров. Такой тип автоповорота понадобится в том случае, если вам нужно будет отклонять назад анимацию коробки при движении вверх по наклонному конвейеру.

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

Динамическое изменение поворота агента

Функции
Функция Описание
double getRotation() Возвращает текущий угол поворота агента (в радианах). Применимо только при нахождении агента в непрерывном или в ГИС пространстве.
double getGISHeading() Возвращает угол текущего направления агента (измеряется в радианах, по часовой стрелке, начиная с северного направления). Применимо только при нахождении агента в ГИС пространстве.
void setRotation(double rotation) Задает угол поворота анимации агента (в радианах). Применимо только при нахождении агента в непрерывном или в ГИС пространстве.

rotation — угол поворота агента в радианах
boolean isAutomaticHorizontalRotation() Возвращает true, если агент поворачивается по ходу движения, false - если нет.
void setAutomaticHorizontalRotation(boolean yes) Задает, должна ли анимация агента автоматически поворачиваться в направлении движения агента.

yes — если true, то анимация агента будет поворачиваться, если false - нет
double getVerticalRotation() Возвращает угол поворота анимации агента относительно вертикальной оси Z (в радианах). Применимо при нахождении агента в непрерывном пространстве.
void setVerticalRotation(double rotation) Задает угол поворота анимации агента относительно вертикальной оси Z (в радианах). Применимо при нахождении агента в непрерывном пространстве.

rotation — угол поворота
boolean isAutomaticVerticalRotation() Возвращает true, если анимация агента автоматически наклоняется при движении по наклонным плоскостям (пример - коробка, которая едет по конвейеру), false - если нет (пример - пассажир, поднимающийся по лестнице и не отклоняющийся при этом, чтобы быть перпендикулярным плоскости лестницы).
void setAutomaticVerticalRotation(boolean yes) Задает, должна ли фигура анимации агента автоматически поворачиваться (наклоняться или отклоняться) относительно вертикальной оси при движении агента по наклонным плоскостям.

yes — если true, то анимация агента будет поворачиваться, если false - нет
Как мы можем улучшить эту статью?