Поезд (Train)

Поезд (или состав) представляет собой последовательность нескольких сцепленных друг с другом железнодорожных вагонов (объектов класса RailCar), которые могут двигаться по железнодорожному узлу и управляться диаграммами процессов, собранными из объектов Железнодорожной библиотеки и Основной библиотеки. Начиная с версии AnyLogic 6.5.1 основными сущностями, с которыми Вы будете иметь дело при создании железнодорожных моделей, будут не вагоны (объекты класса RailCar), а поезда (объекты класса Train). Если вагон является частью объекта Train, то он полностью управляется этим поездом, и не будет управляться большинством низкоуровневых команд, таких, как setVelocity() или couple().

Поезда создаются объектами TrainSource, а уничтожаться из модели должны объектами TrainDispose. Поезд может быть разделен на два поезда объектом  TrainDecouple, а два поезда, в свою очередь, могут быть сцеплены в один поезд, с помощью объекта TrainCouple. Управление перемещением поездов по железнодорожному узлу производится объектами TrainMoveTo. Класс Train является подклассом класса Entity, поэтому поезда могут проходить через любые объекты Основной библиотеки, такие, как Delay, Seize, Release и т.д.

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

В Железнодорожной библиотеке нет понятия локомотива, или каких-то других типов вагонов: все железнодорожные вагоны рассматриваются как одинаковые. Любой поезд может двигаться с любой скоростью, сцепляться и расцепляться с любой своей стороны.

У поезда есть крейсерская скорость, свойства, хранящие значения ускорения и торможения. Изначально они задаются объектом TrainSource, но впоследствии Вы можете изменить их с помощью функций класса Train. Вы можете изменять значение скорости во время движения поезда, как мгновенно, так и с использованием усорения и торможения.

Поезд

Анимация поезда фактически является анимацией вагонов поезда, у самого состава нет какой-то особенной, присущей ему, графики.

Функции

Содержимое и размерности поезда

int size() - Возвращает количество вагонов в поезде.

double getLength() - Возвращает длину поезда (сумму длин всех вагонов), в метрах.

boolean isEmpty() - Проверяет, не пуст ли поезд, т.e. содержит ли он вагоны. Возвращает true, если он пуст; false, если нет.

RailCar getFirst() - Возвращает первый вагон поезда (если поезд пустой, то возвращает null).

RailCar getLast() - Возвращает последний вагон поезда (если поезд пустой, то возвращает null).

RailCar get( int i ) - Возвращает вагон с заданным индексом i. Индекс первого вагона равен 0, последнего: size()-1.

Скорость и ускорение

void setCruiseSpeed( double speed ) - Задает крейсерскую скорость поезда (значение должно быть больше 0).
        Параметр: speed - новая крейсерская скорость поезда, в м/с.

double getCruiseSpeed() - Возвращает крейсерскую скорость поезда, в м/с.

void setAcceleration( double acceleration ) - Задает ускорение поезда (значение должно быть больше 0).
        Параметр: acceleration - новое ускорение поезда, в м/с2.

double getAcceleration() - Возвращает ускорение поезда, в м/с2.

void setDeceleration( double deceleration ) - Задает торможение поезда (значение должно быть больше 0).
        Параметр: deceleration - новое торможение поезда, в м/с2.

double getDeceleration() - Возвращает торможение поезда, в м/с2.

Управление движением

Route getRoute() - Возвращает маршрут, по которому в данный момент движется поезд (если такой есть). Маршрут существует только до тех пор, пока поезд управляется объектом TrainMoveTo.

boolean isMoving() - Проверяет, движется ли поезд в текущий момент времени. Пустой поезд понимается как недвигающийся. Возвращает true, если поезд движется; false, если нет.

RailCar getHead()- Возвращает вагон, находящийся в голове движущегося поезда (это может быть как первый, так и последний вагон состава), или null, если поезд не движется. 

RailCar getTail()- Возвращает вагон, находящийся в хвосте движущегося поезда (это может быть как первый, так и последний вагон состава), или null, если поезд не движется. 

void setVelocity( double v ) - Задает новую скорость поезда, в м/с. Если поезд движется, то новая скорость применяется мгновенно. Если поезд не движется, то значение скорости просто запоминается, но движение при этом не начинается. Во время движения поезда нельзя задать скорость равной нулю.  Отменяет все ускорения/торможения, за исключением конечного торможения при подъезде поезда к точке назначения.
        Параметр: v - новая скорость поезда, в м/с.

double getVelocity() - Возвращает скорость поезда, в м/с. Если поезд пустой, то возвращает 0.

void accelerateTo( double speed ) - Ускоряет или тормозит поезд до достижения заданной скорости. Функция может быть вызвана только во время движения поезда. Не изменяет крейсерскую скорость. Использует текущие настройки для ускорения/торможения. С помощью этого метода нельзя осуществлять торможение до нуля, поскольку управление остановкой поезда осуществляется объектом TrainMoveTo (используйте опцию торможение при окончании движения). Отменяет все ускорения/торможения, за исключением конечного торможения при подъезде поезда к точке назначения.
        Параметр: speed - новая желаемая скорость, в м/с.

boolean getDirection() - Проверяет, движется ли в голове поезда первый вагон этого состава. Возвращает true, если первый вагон движется в голове;  false - если нет

ShapePolyLine getTrack( boolean front ) - Возвращает путь (ломаную), где в текущий момент находится заданная граница поезда.
        Параметр: front - если true, то под границей понимается несцепленный торец первого вагона, если false - то последнего

double getOffset( boolean front ) - Возвращает смещение заданной границы поезда (см. параметр front) относительно начальной точки пути, в метрах. 0 соответствует началу пути.
        Параметр: front - если true, то проверяется несцепленный торец первого вагона, если false - то последнего

boolean getOrientation( boolean front ) - Проверяет, соответствует ли направление поезда направлению пути, на котором находится заданная граница поезда (см. параметр front), т.e. соответствует ли направление “от конца к началу поезда” направлению “от начала к концу пути”. Возвращает true, если направления совпадают, false - если нет.
        Параметр: front - если true, то проверяется несцепленный торец первого вагона, если false - то последнего

boolean isForwardOnTrack( boolean front ) - Проверяет, движется ли поезд по направлению к концу того пути, на котором находится заданная граница (см. параметр front) этого поезда.
        Параметр: front - если true, то проверяется несцепленный торец первого вагона, если false - то последнего

ShapePolyLine getTargetTrack() - Возвращает путь назначения движущегося поезда (если цель не задана, то возвращает null).

double getTargetOffset() - Возвращает смещение от начала пути назначения до цели движения на нем (при условии, что цель задана) для движущегося поезда, в метрах.

double getDistanceToTarget() - Возвращает расстояние от текущего местоположения до точки назначения, в метрах. Подразумевается, что поезд движется вдоль маршрута (заданного пользователем или вычисленного автоматически), и цель движения задана.

double getDistanceDriven() -  Возвращает расстояние (в метрах), которое проехал поезд с момента своего создания (или последнего вызова метода resetDistanceDriven(), если такой был).

void resetDistanceDriven() - Устанавливает расстояние, пройденное поездом, равным нулю.

Разное

RailYard getRailYard() - Возвращает железнодорожный узел, на котором в данный момент находится поезд. Если поезд пустой, то возвращает null.

void highlight( boolean yes ) - Выделяет или снимает выделение с фигуры поезда на анимации.
        Параметр: yes - если true, то поезд будет выделен, если false, то выделение будет снято