Гляди в оба -- впереди Фобос!
Игровая программа «ОС-I» относится к классу сложных в обращении. Чтобы совершать перелёты на орбитальные станции или между ними, необходимо пройти "школу первоначального обучения пилотажу" на «Лунолёте-I» и «Лунолёте-II». Опыт, приобретённый на «Лунолёте-III», также бесценен.
В чём отличие от третьего Лунолёта? «ОС-I» выводит на экран расстояние в прямоугольной системе координат с центром в орбитальной станции. Т.к. орбитальная станция постоянно вращается, ваши перемещения в её окресностях выглядят весьма замысловато. Пока никто не "присобачил" к «ОС-I» графический вывод, ЦУП ТМ рекомендует летать с миллиметровкой. Отмечая на листочке положение вашего космического корабля после каждого манёвра.
С помощью «ОС-I» можно повторить первую часть отважного путешествия Льва Роканиди с марсианской станции «Джонотан Свифт» на Фобос из ТМ-1986
№7. Это задание было дано в ТМ-1985
№11, а сама программа впервые опубликована в ТМ-1985
№10.
' OC-1
' Публикация: ТМ-1985 N9, ТМ-1986 N6
' Версия для ПМК (c) Михаил Пухов и Сергей Волков
' OC-I v1o
' Публикация: LJR, 28 мая 2006
' Точный перевод на QBasic (c) Илья Васильев
' Распространяется под GPL v2 или старше
DECLARE FUNCTION F00! (X!)
CLS
PRINT " +++ OC-I +++"
PRINT
' Блок ввода исходных данных
PI# = 3.1415926#
U = 0: M = 2250: C = 3660: MM = 3500: R = 3394000: RR = R + 300000
RO = 9380000: VO = -SQR(3.72 / RO) * R
V = SQR(3.72 / RR) * R + VO
X = -15000000
H = RR - R
DO
' Блок проверки: положительность высоты
IF H < 0 THEN
DO
' Посадочный блок
T = -(RR - R) / U
PRINT " 1 -00"
GOSUB P
LOOP WHILE ABS(H) < .001
H = 0
END IF
' Рычаги управления
' Расход топлива при манёвре не должен превышать 5% от полной массы корабля
' (для лунолётов класса "Кон-Тики" это составляет 100-200 кг, в зависимости
' от наличного запаса топлива).
' Не рекомендуется также задавать время манёвра больше 100 с. Последнее
' ограничение снимается лишь в свободном полёте, после выхода на орбиту;
' но и в этом случае следует анализировать ситуацию хотя бы каждые 1000 с.
DO
PRINT "Расстояние до центра планеты:"; RR; "м"
PRINT "Горизонтальная скорость относительно поверхности планеты:"; V - VO; "м/с"
PRINT "Запас топлива:"; MM; "кг",
PRINT "Реактивное ускорение:"; A; "м/с^2"
PRINT "Высота полёта:"; H; "м",
PRINT "Вертикальная скорость:"; U; "м/с"
PRINT "Горизонтальная скорость относительно станции:"; V; "м/с"
PRINT "Горизонтальная координата относительно станции:"; X; "м"
PRINT "Расстояние по вертикали до орбиты космической станции:"; RR - RO; "м"
INPUT "угол, градусы; расход топлива, кг; время, с"; AL, DM, T
AL = AL * PI# / 180
' Блок проверки: перерасход топлива
LOOP WHILE DM > MM
' Блок вычисления: реактивное ускорение
MM = MM - DM
A = DM * C / ((M + MM) * T)
GOSUB P
LOOP 'Главный игровой цикл
P:
' "Припев"
' Определяет значения текущих переменных.
' Рассчётный блок, полностью совместимый с "ОС-1".
T1 = F00(((VO - V) * U / RR + A * SIN(AL)) * T + V)
X = X + (((T1 + V) / 2 - VO) * RO / RR + VO) * T
V = T1
T1 = F00(U + ((VO - V) * (VO - V) / RR + A * COS(AL) - VO * VO * RO / (RR * RR)) * T)
RR = RR + (U + T1) * T / 2
U = T1
H = RR - R
RETURN
FUNCTION F00 (X)
' Универсальный обнулитель
IF ABS(X) < 1 THEN F00 = 0 ELSE F00 = X
END FUNCTION