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 - нет
-
Как мы можем улучшить эту статью?
-