Механика локомотива

Зная расстояние от производства до города, можно определить время, за которое поезд его проедет. И наоборот, зная время движения поезда по маршруту, можно определить расстояние. Всё это делает известный калькулятор. Разберёмся, что и как он считает.

Основными показателями локомотива являются:

Движение поезда бывает двух типов: разгон и равномерное движение. График скорости от времени выглядит так:

График скорости

Разгон. Начальная скорость составляет 0, конечная - VR. Время разгона до максимума составляет T=VR/A секунд. За это время поезд проезжает расстояние D=AT2/2.

Равномерное движение. Скорость составляет VR, за время T поезд проходит расстояние VRT.

Пройденное поездом расстояние - площадь под графиком (интеграл от скорости).

Расчёт времени маршрута

Как определить, за какое время поезд проедет заданное расстояние L при движении на прямом маршруте (производство-город).

Поезд достигает максимальной скорости через T=VR/A секунд. За это время поезд успевает проехать X=AT2/2. Далее возможны два варианта:

Чтобы определить общее время маршрута, нужно умножить эту величину на 2, затем прибавить время ожидания на производстве.

Расчёт расстояния

Пусть у нас известно время ожидания W и общее время движения T на прямом маршруте. Как определить расстояние от производства до города?

Время движения в одну сторону составит T0=(T-W)/2. Время разгона T1=VR/A, за это время поезд проезжает X=AT2/2. Далее опять возможны два варианта:

Доход в час

Ожидаемый доход в час расчитывается по формуле: 3600PS/T, где P - цена за вагон, S - тяга, T - время круга.

Формулы

В реальных вычислениях приходится учитывать, что скорость указывается в км/ч, ускорение - в км/ч/с, а расстояние - в метрах. Поэтому в формулах встречается магическая константа 3.6=3600/1000 (3600 секунд в одном часе и 1000 метров в одном километре).

// расчёт времени
function RNTIME(train,dist,wait) {
  var t = trainparams_(train);
  var r = t.r/100; // износ
  var t1 = t.v*r/t.a; // время разгона с учётом износа
  var a = t.a/3.6; // ускорение в нужных единицах
  var v = t.v*r/3.6; // максимальная скорость с учётом износа
  var l1 = a*t1*t1/2; // длина разгона
  var l2 = dist-l1; // длина пути на максимальной скорости
  if (l2<0) { // если разгон не успевает сделать
    t1 = Math.sqrt(2*dist/a);
    l2 = 0;
  }
  t2 = l2/v;
  var t0 = t1+t2;
  return 2*t0+wait;
}

// расчёт расстояния
function RNDIST(train,time,wait) {
  var t = trainparams_(train);
  var r = t.r/100; // износ
  var t0 = (time-wait)/2; // время пути в одну сторону
  var t1 = t.v*r/t.a; // время разгона с учётом износа
  var t2 = t0-t1; // время движения на максимальной скорости
  if (t2<0) { // если разгон не успевает сделать
    t2 = 0;
    t1 = t0;
  }
  var a = t.a/3.6; // ускорение в нужных единицах
  var v = t.v*r/3.6; // максимальная скорость с учётом износа
  var l1 = a*t1*t1/2; // длина разгона
  var l2 = v*t2; // длина пути на максимальной скорости
  var l=l1+l2;
  return l;
}

(Если кому-то это интересно: функции написаны на языке JavaScript, используются в таблицах Google Docs)

Длина перегона

Используя формулы, можно посчитать длину различных перегонов. Она окажется разной. Например, вычисленное мною расстояние от города Синевилль до зерна - 750 м, до угля и брёвен - 880 м. В различных прикидках обычно считают, что длина перегона составляет примерно 900 м.

Реальное игровое поле состоит из шестиугольников-сот (см. тут). Примерный размер рельсов одной соты составляет 150 м. При этом в начале и конце маршрута между двумя узлами берётся по половине этой величины. В качестве примера рассмотрим тот же Синевилль: до зерна - 5 сот (4 на рельсы и по половине на производство зерна и сам город), до угля и брёвен - 6 сот. Из расчёта 150 м на соту получается 750 и 900 м соответственно. Очень похоже на расчётные значения. Для сравнения можно взглянуть на кожу и руду:

Товар Расстояние Перегонов Сот Средняя длина перегона Средняя длина соты
Руда 2450 м 3 16 816.57 м 153.125 м
Кожа 2750 м 3 19 916.67 м 144.737 м

Расстояния были чуть-чуть округлены. Точные значения получить проблематично, потому что игра округляет отображаемые значения времени в неизвестную нам сторону, а это может давать погрешность. Например, если реальное ВО на одну секунду меньше, а длина маршрута на одну секунду больше, чем я наблюдал при расчёте расстояний, то расстояние для руды вместо 2457.31 м будет составлять 2501.75 м. Чем меньше расстояние и чем быстрее локомотив, тем больше погрешность.

Вполне возможно, что длина пути через соты неодинакова. Вероятно, прямой рельс имеет иную длину, чем кривой, но чёткой закономерности мне отловить не удалось.

Интересно, что расстояние от города до ближайших производств на классике обычно составляет 5-6 сот, на карте США 4-5 сот. Ласточки чувствуют эту разницу, в результате первый ап на карте США случается чуть быстрее, чем на классике.