Вы можете переместить агента в новое местоположение вызовом одной из его многочисленных функций передвижения.
Движение в непрерывном пространстве имеет наибольшее количество функций. Также имеются специальные функции, задающие движение в пространстве ГИС и дискретном пространстве.
Свои особенности имеет движение агентов в сети и вне сети.
Вы можете задать начальную скорость, поворот фигуры анимации агента, а также реакцию агента на достижение места назначения.
Во-первых, существуют функции, чтобы получать информацию о текущем местоположении (эти функции работают и при движении агента). Кроме того, имеется набор функций для перемещения агента и получения соответствующей информации.
Функции moveTo() и moveToInTime() имеют несколько нотаций, позволяя задавать местоположение цели различными способами.
Вы можете задать местоположение как:
- X, Y координаты: moveTo(double x, double y)
- X, Y, Z координаты: moveTo(double x, double y, double z)
- Точку: moveTo(Point location)
- Аттрактор: moveTo(Attractor attractor)
- Узел сети: moveTo(Node node)
- Узел сети и место внутри узла — точку (x,y,z): moveTo(Node node, Point location)
- Задание начального местоположения при запуске модели
-
Функция Описание void setXY(double x, double y) Задает координаты местоположения агента. Должен использоваться только для начальной расстановки агентов. Подразумевает, что агент не движется.
x — X-координата местоположения
y — Y-координата местоположения - Определение текущего местоположения
-
Функция Описание double getX() Возвращает текущую X-координату агента в непрерывном пространстве. double getY() Возвращает текущую Y-координату агента в непрерывном пространстве. double getZ() Возвращает текущую Z-координату агента в непрерывном пространстве. Position getPosition() Возвращает текущие X- и Y-координаты (и Z-координату также, в случае 3D пространства) и угол поворота агента в непрерывном пространстве. - Задание движения агента
-
Функция Описание void moveTo(double x, double y) Инициирует перемещение агента в место с заданными координатами в непрерывном 3D пространстве.
x — X-координата местоположения
y — Y-координата местоположенияvoid moveTo(double x, double y, double z) Инициирует перемещение агента в место с заданными координатами в непрерывном 3D пространстве.
x — X-координата местоположения
y — Y-координата местоположения
z — Z-координата местоположенияvoid moveTo(Point location) Инициирует перемещение агента в направлении заданного местоположения в непрерывном 3D пространстве.
location — место назначенияvoid moveTo(Node node, Point location) Инициирует перемещение агента в заданный узел сети.
node — узел сети.
location — (дополнительно) местоположение внутри узла, может быть nullvoid moveTo(Attractor attractor) Инициирует перемещение агента в заданный аттрактор.
attractor — аттракторvoid moveToNearestAgent(java.lang.Iterable agents) Инициирует перемещение агента к ближайшему агенту из данной коллекции. Прекращает какое-либо движение в этот момент.
agents — коллекция агентовboolean isMoving() Проверяет, движется ли агент в текущий момент в непрерывном 3D пространстве. Возвращает true, если агент движется; в противном случае возвращает false. double timeToArrival() Если агент движется, то возвращает время (в единицах модельного времени), нужное ему для того, чтобы прибыть в место назначения, с учетом того, что скорость не изменится. Если агент не движется, возвращает 0. void stop() Останавливает агента (если он двигался); агент остается при этом в том же месте, и Действие при достижении места назначения не выполняется. - Перемещение за указанное время
-
Функция Описание void moveToInTime(Point location, double tripTime) Инициирует перемещение агента в направлении заданного местоположения. Изменяет скорость агента так, чтобы достичь цели за tripTime единиц модельного времени.
location — место назначения
tripTime — время перемещенияvoid moveToNearestAgent (java.lang.Iterable agents, double tripTime) Инициирует перемещение агента к ближайшему агенту из данной коллекции. Прекращает какое-либо движение в этот момент. Изменяет скорость агента так, чтобы достичь цели за tripTime единиц модельного времени.
agents — коллекция агентов
tripTime — время перемещенияvoid moveToInTime(double x, double y, double tripTime) Инициирует перемещение агента в место с заданными координатами в непрерывном 3D пространстве. Изменяет скорость агента так, чтобы достичь цели за tripTime единиц модельного времени.
x — X-координата местоположения
y — Y-координата местоположения
tripTime — время перемещенияvoid moveToInTime(double x, double y, double z, double tripTime) Инициирует перемещение агента в место с заданными координатами в непрерывном 3D пространстве. Изменяет скорость агента так, чтобы достичь цели за tripTime единиц модельного времени.
x, y, z: X-, Y-, Z- координаты местоположения
tripTime — время перемещенияvoid moveToInTime(Node node, Point location, double tripTime) Инициирует перемещение агента в заданный узел сети. Изменяет скорость агента так, чтобы достичь цели за tripTime единиц модельного времени.
node — узел сети.
location — (дополнительно) место внутри узла, может быть null
tripTime — время перемещенияvoid moveToInTime(Attractor attractor, double tripTime) Инициирует перемещение агента в заданный аттрактор. Изменяет скорость агента так, чтобы достичь цели за tripTime единиц модельного времени.
attractor — аттрактор
tripTime — время перемещения - Мгновенное перемещение ("скачком")
-
Функция Описание void jumpTo(double x, double y) Немедленно помещает агента в заданное место в непрерывном 3D пространстве. Прекращает любое движение. Не вызывает Действие при достижении места назначения.
x — X-координата нового местоположения
y — Y-координата нового местоположенияvoid jumpTo(double x, double y, double z) Немедленно помещает агента в заданное место в непрерывном 3D пространстве. Прекращает любое движение. Не вызывает Действие при достижении места назначения.
x — X-координата нового местоположения
y — Y-координата нового местоположения
z — Z-координата нового местоположенияvoid jumpTo(Node node, Point location) Немедленно помещает агента в заданный узел сети в непрерывном 3D пространстве. Прекращает любое движение. Не вызывает Действие при достижении места назначения.
node — узел сети
location — новое местоположениеvoid jumpTo(Point location) Немедленно помещает агента в заданное место в непрерывном 3D пространстве. Прекращает любое движение. Не вызывает Действие при достижении места назначения.
location — новое местоположение - Получение координат цели движения
-
Функция Описание double getTargetX() Возвращает X-координату места назначения движения агента, если он движется, или его текущую X-координату, если нет. double getTargetY() Возвращает Y-координату места назначения движения агента, если он движется, или его текущую Y-координату, если нет. double getTargetZ()
Возвращает Z-координату места назначения движения агента, если он движется, или его текущую Z-координату, если нет.
- Определение расстояния
-
Функция Описание double distanceTo(Agent other) Возвращает расстояние от текущего до указанного агента в непрерывном 3D пространстве.
other — другой агентdouble distanceTo(double x, double y) Возвращает расстояние от данного агента до заданной точки в непрерывном 3D пространстве.
x — X-координата точки
y — Y-координата точкиdouble distanceTo(double x, double y, double z) Возвращает расстояние от данного агента до заданной точки (x, y, z) в непрерывном 3D пространстве.
x — X-координата точки
y — Y-координата точки
z — Z-координата точкиdouble distanceTo(Point p) Возвращает расстояние от данного агента до заданной точки в непрерывном 3D пространстве.
p — точка - Определение и задание скорости
-
Функция Описание double getSpeed() Возвращает скорость агента (скорость является параметром агента, это та скорость, с которой он обычно передвигается, и ненулевая скорость еще не означает, что этот агент движется в данный момент времени) void setSpeed(double v) Задает скорость (в пикселях в секунду), с которой агент будет передвигаться. Если на момент вызова метода агент движется, то он продолжит движение с новой скоростью. Если агент не движется, то он не начнет движение, пока вы не вызовете метод moveTo().
v — новая скорость - Определение и задание поворота
-
Функция Описание double getRotation() Возвращает текущий угол горизонтального вращения агента в непрерывном трехмерном или ГИС-пространстве (измеряется относительно точки координат 1.0 по часовой стрелке; т.е. нулевому углу соответствует положение часовой стрелки, показывающей на три часа). Значение возвращается в радианах.
Вы можете отключить автоматическое вращение агента в его свойствах (для этого отключите опцию Поворачивать анимацию согласно направлению движения) или с помощью функции setAutomaticHorizontalRotation(). Если автоматическое вращение активно, то агент вращается автоматически при начале движения, а также при поворотах внутри непрерывного трехмерного или ГИС-пространства.
Чтобы повернуть агента вручную, используйте функцию setRotation().void setRotation(double rotation) Задает угол поворота анимации агента (в радианах, по часовой стрелке). Этот угол поворота будет переопределен при следующем вызове метода moveTo().
rotation — угол поворота анимации агента (в радианах)void setAutomaticHorizontalRotation(boolean yes) Заставляет агента автоматически вращаться во время перемещений. Если yes — true, то агент будет вращаться во время движения, если же false — вращение не происходит. boolean isAutomaticHorizontalRotation() Возвращает true, если агент настроен вращаться во время движения, в противном случае возвращает false. void setVerticalRotation(double rotation) Устанавливает вертикальный поворот (угол в радианах) вдоль оси Z анимации агента в 3D пространстве. В зависимости от настроек автоматического вращения, этот поворот может быть отменен во время следующего вызова moveTo() или во время следующего движения вдоль пути/ломаной.
rotation — угол вертикального поворота агента в радианахdouble getVerticalRotation() Возвращает текущий угол поворота агента вокруг оси Y в радианах в 3D пространстве. Если установлен режим автоматического вертикального вращения, поворот меняется каждый раз, когда агент начинает движение, а также меняется много раз, пока агент движется вдоль ломаной. void setAutomaticVerticalRotation(boolean yes) Заставляет агента автоматически вращаться (вертикально, вдоль оси Z) во время движения в 3D пространстве. Если yes — true, то агент будет вращаться во время движения (например, коробка, которая едет по конвейеру),а если false — поворот не меняется (например, пешеход перемещается на уровень выше) boolean isAutomaticVerticalRotation() Возвращает true, если агент должен вращаться (вертикально, вдоль оси Z) во время движения в 3D пространстве, в противном случае возвращает false.
Также существуют специфические функции для движения в дискретном пространстве и пространстве ГИС.
Чтобы задать начальную скорость и угол поворота агента
- Откройте панель Свойства типа агента, щелкнув по нему мышью в панели Проекты.
- Откройте секцию свойств Размеры и движение.
- Укажите начальную скорость агентов этого типа в поле Начальная скорость (в метрах в секунду).
- Если вы хотите вращать фигуру анимации по направлению движения, поставьте флажки в опциях ниже.
Чтобы задать действие, которое должно выполняться при достижении агентом точки назначения (после того, как выполнится метод moveTo())
- Откройте секцию свойств типа агента Действия агента.
- Впишите код Java, задающий действие в поле При достижении точки назначения.
Хотя AnyLogic напрямую поддерживает движение на постоянной скорости и при нулевом ускорении, вы можете смоделировать ускорение/торможение, изменяя скорость в подходящие моменты времени. Вы можете использовать диаграмму состояний с таким состояниями как Статический, Медленный, Средний, Быстрый и т.д. и переходы по таймауту, чтобы управлять движением.
-
Как мы можем улучшить эту статью?
-