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

Дорога

Элемент Дорога является графическим элементом разметки пространства, это непрерывная дорога(т.е. такая дорога, которая не содержит перекрестков). Используя дороги, перекрестки и другие элементы разметки пространства, вы создаете дорожные сети для моделей Библиотеки дорожного движения. Дорожная сеть может состоять даже из одной дороги: AnyLogic автоматически создает ее, когда вы рисуете дорогу в графическом редакторе агента.

Дорога может содержать множество прямых и дуговых сегментов (дорога на рисунке выше состоит из двух прямых сегментов и одного дугового сегмента в центре).

Следующие свойства дорог задаются не в свойствах дороги, а в свойствах дорожной сети, которой принадлежит эта дорога: направление движения, ширина полосы, цвет дорожной разметки и т.д.

Дорога может содержать произвольное количество полос. Дорога может быть как односторонняя, в этом случае все автомобили движутся в одном направлении, так и двусторонняя, в этом случае на дороге будет несколько полос основного движения и несколько полос встречного движения. Дорога на рисунке выше содержит две полосы основного движения (стрелка на дороге находится на полосе основного движения) и две полосы встречного движения (они находятся сверху, движение транспорта на них происходит справа налево). Библиотека дорожного движения не поддерживает полосы, по которым транспорт может совершать движение в обе стороны.

Одна дорога содержит неизменное количество полос на всем своем протяжении. Можно создавать участки слияния дорог, путем соединения двух дорог с разным количеством полос.

Дорога может содержать сегменты с уклоном. Форму дороги можно настроить, изменив Z-координаты концов дорожного сегмента в секции свойств дороги Местоположение и размер.

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

Создание дороги

Мы продемонстрируем как рисовать дорогу на примере небольшого участка улицы Бродвей у Мэдисон Сквер Парк и Флэтайрон-билдинг:

Если вы решите следовать этому небольшому учебному пособию, используйте изображение выше в вашей модели (сохраните изображение себе на компьютер, щелкнув по нему правой кнопкой мыши и выбрав из контекстного меню пункт Сохранить изображение как...)

Чтобы нарисовать дорогу

  1. Прежде чем нарисовать дорогу, следует отключить сетку в графическом редакторе. Щелкните по кнопке панели инструментов Включить/Отключить сетку . Она должна принять вид ненажатой кнопки: .
  2. Сделайте двойной щелчок по элементу Дорога в секции Разметка пространства палитры Библиотека дорожного движения. Иконка элемента изменится на . Это означает, что активирован режим рисования, и теперь вы можете рисовать дорогу в графическом редакторе.

  3. Щелкните мышью в графическом редакторе, чтобы поставить первую точку дороги.

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

  5. Следующий сегмент нашей дороги имеет форму дуги. Чтобы нарисовать дуговой сегмент дороги, зажмите левую кнопку мыши в следующей точке поворота дороги (в начале следующего прямого сегмента) и перемещайте курсор с нажатой левой кнопкой мыши до тех пор, пока сегмент не приобретет необходимую форму.

  6. Чтобы завершить рисование, добавьте последнюю точку дороги двойным щелчком мыши.

  7. Если это первая дорога в вашей модели, вы увидите сообщение с предложением сменить масштаб модели на: 25,0 метров в 100 пикселях. Мы советуем согласиться, так как предлагаемый масштаб часто используется в типичных моделях дорожного движения. После этого вы увидите нарисованную дорогу. Она должна быть похожа на дорогу, которая изображена на рисунке ниже:

  8. Настройте атрибуты дороги в панели Свойства. По умолчанию дороги создаются с двусторонним движением, при этом каждое направление дороги (основное и встречное) содержит по две полосы движения. Бродвей — дорога с односторонним движением, поэтому необходимо установить флажок напротив опции Одностороннее движение. Количество полос автоматически уменьшится до двух. В результате дорога может немного сместиться, и вам потребуется настроить ее положение. Стрелка на дороге указывает направление движения автомобилей.

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

  9. Выделите дорожную сеть щелкнув по дороге.Первый щелчок мыши выделит саму дорогу. Следующий щелчок выделит дорожную сеть. После этого откройте секцию свойств дорожной сети Внешний вид. Щелкните по элементу управления Цвет дороги, выберите Другие цвета... из списка и задайте для свойства Прозрачность значение 150, к примеру.

  10. Теперь можно увидеть, как созданная дорога накладывается на дорогу на карте. Если она шире или уже, необходимо настроить масштаб модели. При необходимости можете перетащить холст немного ниже, чтобы на экране (над осью Х) появился элемент Масштаб, в свойствах которого можно будет указать масштаб. Ширина дороги будет соответствовать внесенным изменениям.

  11. В этом примере, линейке масштаба задано соответствие 25 метрам. В итоге у вас должна получиться дорога, подобная той, что на рисунке ниже:

Дальнейшее рисование дорожной сети (добавление перекрестков и создание других дорог) описано здесь.

Свойства

Основные свойства

Имя — Имя фигуры.

Исключить — Если опция выбрана, то фигура будет исключена из модели.

Отображается на верхнем агенте — Если опция выбрана, то фигура будет видна на презентации типа агента, в который будет вложен данный агент.

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

Видимость — Если опция выбрана, то фигура будет отображаться на презентации во время выполнения модели.

Одностороннее движение — Если эта опция выбрана, то дорога содержит полосу (полосы) для движения машин только в одном направлении (называемом основным). Если нет, то у дороги также есть полосы встречного движения.

Кол-во полос основного движения — Указывает количество полос, по которым движение происходит вперед относительно начала дороги.

Кол-во полос встречного движения — [Параметр виден, если не выбрана опция Одностороннее движение] Определяет количество полос со встречным движением.

Ширина разделительной полосы — [Параметр виден, если не выбрана опция Одностороннее движение] Определяет ширину полосы, разделяющей полосы встречного движения.

Цвет разделительной полосы — [Параметр виден, если не выбрана опция Одностороннее движение] Определяет цвет полосы, разделяющей полосы встречного движения.

Местоположение и размер

X — X-координата начальной точки дороги.

Y — Y-координата начальной точки дороги.

Z — [Доступно, только если установлен флажок Отображать: В 2D и в 3D или Только в 3D] Z-координата начальной точки пути.

Точки
В секции свойств Точки расположена таблица относительных координат точек пути. Первая точка всегда имеет координаты (0,0,0), и они не редактируются. В остальных строках таблицы задаются координаты последующих точек. Координаты каждой точки представляют собой смещения этой точки от начальной по оси X, Y и Z соответственно. И если координаты точек в двумерном пространстве XY вы можете изменить и в графическом редакторе, то расположение точек дороги относительно оси Z можно изменить только в этой таблице.
Специфические

Отображать в — Здесь вы можете выбрать, будет ли фигура отображаться В 2D и в 3D, Только в 2D или Только в 3D (для просмотра трехмерной анимации нужно добавить 3D окно).

Отображать имя — Если опция выбрана, то имя фигуры будет отображаться в графическом редакторе.

Изменение формы дороги

Вы можете сделать прямой сегмент дороги — дуговым, и наоборот, а также редактировать форму дугового сегмента.

Чтобы сделать сегмент дороги прямым / дуговым

  1. Щелкните правой кнопкой мыши по дороге в графическом редакторе и выберите Сделать сегмент прямым/дуговым из контекстного меню.
  2. При наведении мыши на сегмент вы увидите, какую форму этот сегмент примет после преобразования. Щелкните мышью по сегменту, форму которого вы хотите изменить.
  3. При необходимости вы можете повторить операцию для других сегментов. Когда закончите, щелкните в пустом месте диаграммы, чтобы выйти из режима преобразования сегментов дороги.

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

Чтобы изменить форму дугового сегмента дороги

  1. Щелкните по дороге правой кнопкой мыши и выберите опцию Редактировать направляющие из контекстного меню.
  2. Вы увидите множество маркеров. Если квадратные маркеры отображают конечные точки сегментов дороги, то прямые линии с круглыми маркерами на концах  — это и есть направляющие линии. У каждой конечной точки сегмента есть своя направляющая линия. Направляющие линии появятся для каждой точки изгиба дороги.

  3. Перетащите мышью конечную точку направляющей линии. Форма соответствующего дугового сегмента при этом будет меняться. Отпустите кнопку мыши, когда вы получите сегмент нужной вам формы. Возможно, для этого потребуется также изменить длину и/или положение другой направляющей линии этого сегмента дороги.
  4. Чтобы выйти из режима редактирования, щелкните по дороге правой кнопкой мыши и отключите опцию Редактировать направляющие из контекстного меню, или просто щелкните на пустом месте графической диаграммы.

Чтобы добавить сегмент дороги

  1. Щелкните правой кнопкой мыши по дороге и выберите пункт Добавить линию из контекстного меню.
  2. Теперь нужно указать, с какого конца дороги вы хотите продолжить рисование дороги. Для этого щелкните мышью по соответствующей конечной точке дороги.
  3. Вы находитесь в режиме рисования дороги и можете добавить необходимое количество новых сегментов дороги, как прямых, так и дуговых.
  4. Чтобы завершить рисование, добавьте последнюю точку дороги двойным щелчком мыши.

Направление дороги

У каждой дороги есть направление основного движения, отображаемое стрелкой.

Чтобы изменить направление дороги

  1. Щелкните правой кнопкой мыши по дороге в графическом редакторе и выберите Изменить направление из контекстного меню. Вы увидите, что стрелка направления движения дороги изменит свое направление.

Функции

Автомобили
Функция Описание
int nCars(boolean isOnForwardSide) Возвращает количество автомобилей на полосах основного или встречного движения, в зависимости от значения аргумента.

isOnForwardSide — передайте значение true, чтобы получить количество автомобилей на полосах основного движения, или false, чтобы получить количество автомобилей на полосах встречного движения.
int nCarsOnLane(boolean isOnForwardSide, int laneIndex) Возвращает количество автомобилей на заданной полосе дороги.

isOnForwardSide — передайте значение true, чтобы получить количество автомобилей на определенной полосе основного движения, или false, чтобы получить количество автомобилей на полосе встречного движения.
laneIndex — индекс полосы дороги. Нумерация полос ведется от внешней полосы (индекс = 0) к внутренней.
List<Agent> getCars(boolean isOnForwardSide) Возвращает упорядоченный список автомобилей на полосе основного или встречного движения, в зависимости от значения аргумента. Первый автомобиль в списке является ближайшим к точке съезда с дороги (может первым съехать с дороги, если не будет ускорения).

isOnForwardSide — передайте значение true, чтобы получить количество автомобилей на полосе основного движения, или false, чтобы получить количество автомобилей на полосе встречного движения.
Скорость
Функция Описание
double averageSpeed(boolean isOnForwardSide, double offset) Возвращает среднюю скорость движения на полосе основного или встречного движения (в зависимости от значения аргумента), в заданной отступом точке.

isOnForwardSide — передайте значение true, чтобы узнать скорость на полосе основного направления, или false, чтобы узнать скорость на полосе встречного движения
offset — заданная точка отступа
double averageSpeed(boolean isOnForwardSide, double offset, SpeedUnits units) Возвращает среднюю скорость (в указанных единицах измерения скорости) движения на полосе основного или встречного движения (в зависимости от значения аргумента), в точке заданной отступом.

isOnForwardSide — передайте значение true, чтобы узнать скорость на полосе основного направления, или false, чтобы узнать скорость на полосе встречного движения
offset — заданная точка отступа
units — константа единиц измерения скорости
Полосы
Функция Описание
int getForwardLanesCount() Возвращает количество полос основного движения.
int getBackwardLanesCount() Возвращает количество полос встречного движения.
void setForwardLanesCount(int forwardLanesCount) Задает количество полос основного движения.

forwardLanesCount — новое количество полос основного движения
void setBackwardLanesCount(int backwardLanesCount) Задает количество полос встречного движения.

backwardLanesCount — новое количество полос встречного движения
Разделительная полоса
Функция Описание
double getMedianStripWidth() Возвращает ширину разделительной полосы в пикселях.
double getMedianStripWidth(LengthUnits units) Возвращает ширину разделительной полосы в указанных единицах измерения длины.

units — константа единиц измерения длины
void setMedianStripWidth(double medianStripWidthInPixels) Задает ширину разделительной полосы в пикселях.

medianStripWidthInPixels — указанная ширина разделительной полосы в пикселях
void setMedianStripWidth(double medianStripWidth, LengthUnits units) Задает ширину разделительной полосы в указанных единицах измерения длины.

medianStripWidth — новая ширина разделительной полосы
units — константа единиц измерения длины
void setMedianStripColor(Color color) Задает цвет разделительной полосы.

color -новый цвет, если null,разделительная полоса не отрисовывается.
void setMedianStripColor(Paint color) Задает цвет (или текстуру) разделительной полосы.

color — новая текстура, если null,разделительная полоса не отрисовывается.
Color getMedianStripColor() Возвращает цвет разделительной полосы или null, если у разделительной полосы нет цвета, но есть текстура (в этом случае следует использовать getMedianStripTexture()).
Texture getMedianStripTexture() Возвращает текстуру разделительной полосы, если она есть.
Видимость
Функция Описание
void setVisible(boolean v) Задает видимость дороги.

v — видимость дороги. Если true — дорога видна, если false — нет.
boolean isVisible() Проверяет, видна ли дорога. Если true, дорога видна, если false — нет.
Специфические
Функция Описание
RoadNetwork getRoadNetwork() Возвращает дорожную сеть, в которой находится дорога.
List<StopLine> getStopLines() Возвращает все стоп-линии, которые содержит эта дорога.
List<ParkingLot> getParkingLots() Возвращает все парковки, установленные у этой дороги.
List<BusStop> getBusStops() Возвращает все автобусные остановки, установленные у этой дороги.
MarkupSegment getSegment(int index) Возвращает сегмент с соответствующим индексом.

index — индекс сегмента. У первого сегмента индекс равен 0.
int getSegmentCount() Возвращает количество сегментов.
double getWidth(LengthUnits units) Возвращает общую ширину дороги в пикселях, которая включает сумму ширин всех полос основного направления, встречного направления, а также ширину разделителя.

units — константа единиц измерения длины
Уровень
Функция Описание
Level getLevel() Возвращает уровень, на котором расположена эта дорога.
Удаление
Функция Описание
void remove() Удаляет дорогу из презентации. Если дорога не является частью презентации, функция не выполняет ничего. Обратите внимание, что удаление из презентации не обязательно подразумевает удаление из логики модели, поскольку логические сети и маршруты могли быть заданы еще до удаления элемента и не исчезают.
Как мы можем улучшить эту статью?