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

Зная расстояние от производства до города, можно определить время, за которое поезд его проедет. И наоборот, зная время движения поезда по маршруту, можно определить расстояние.

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

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

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

Разгон. Начальная скорость составляет 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 м. В различных прикидках обычно считают, что длина перегона составляет примерно 750-900 м.

Однако эти величины будут не очень точными. Реальное игровое поле состоит из шестиугольников-сот. Размер рельсов одной соты составляет 126 м. При этом в начале и конце маршрута между двумя узлами берётся по половине этой величины.

Соты

Так что на самом деле указаные выше примеры расстояний - это 756 и 882 метра (6 и 7 сегментов-сот).

Обратите внимание, что в новых раундах, начиная с версии 6.6.1, длина рельсы в одной соте будет составлять 63 метра.

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