|

|

Самое увлекательное приключение XXI века: «Вершина».
Самой популярной игровой программой после «Лунолёта-III» была «Вершина». Первый Лунолёт помогал отработать посадку и зависание над поверхностью планеты. Очень важные космические манёвры. «Лунолёт-III» уже кружил над плоской планетой, а третий позволял облететь круглую планету, учитывал центробежное и кориолисово ускорения. Но все эти программы «имели дело с небесными телами, гладкими, как бильярдный шар». «Вершина» позволяет моделировать манёвры космических аппаратов в сложных условиях высокогорья. Её описание вы найдёте в тех же ТМ-1985 №9 и ТМ-1986 №6.
' Вершина
' Публикация: ТМ-1985 N9, ТМ-1986 N6
' Версия для ПМК (c) Михаил Пухов и Сергей Волков
' Вершина v1o
' Публикация: LJR, 25 мая 2006
' Точный перевод на QBasic (c) Илья Васильев
' Распространяется под GPL v2 или старше
CLS
PRINT " +++ Вершина +++"
PRINT
' Блок ввода исходных данных
PI# = 3.1415926#
G = 1.62: M = 2250: C = 3660: R = 1738000: RR = R
V = 0: U = 0: MM = 3500
' Лунолёт в начальной позиции находится на высоте -6,2 м, то есть как бы
' в стартовом колодце. Причина в том, что подошва горы, перелёт на которую
' надлежит выполнить, тянется довольно далеко. Если стартового импульса не
' хватает, чтобы вывести корабль из колодца, программа действительно
' зацикливается. Если же импульс достаточен, никакого зацикливания не
' происходит и можно смело лететь дальше.
HG = 10000: H2 = 10000: X = -400000
' Круговая скорость в программе "Вершина" не зависит от высоты.
VK = SQR(R * G)
' При первом останове и в случае блокировки программы из-за перерасхода
' топлива "Вершина" отображала на индикаторе не высоту полёта, а расстояние
' от центра планеты.
H = RR - R
DO
' Блок проверки: положительность высоты
IF H < 0 THEN
DO
' Полноценный посадочный блок.
T = ABS(T) / 2 * SGN(H)
GOSUB P
LOOP WHILE ABS(H) < .001
H = 0
END IF
' Рычаги управления
' Расход топлива при манёвре не должен превышать 5% от полной массы корабля
' (для лунолётов класса "Кон-Тики" это составляет 100-200 кг, в зависимости
' от наличного запаса топлива).
' Не рекомендуется также задавать время манёвра больше 100 с. Последнее
' ограничение снимается лишь в свободном полёте, после выхода на орбиту;
' но и в этом случае следует анализировать ситуацию хотя бы каждые 1000 с.
DO
PRINT "Расстояние до центра:"; RR; "м", "Круговая скорость:"; VK; "м/с"
PRINT "Вертикальная скорость:"; U; "м/с",
PRINT "Горизонтальная скорость:"; V; "м/с"
PRINT "Запас топлива:"; MM; "кг", "Реактивное ускорение:"; A; "м/с^2"
PRINT "Высота:"; H; "м",
PRINT "Горизонтальная координата:"; X; "м"
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:
' "Припев"
' Определяет значения текущих переменных.
' В программе "Вершина" гравитационное, кориолисово и центробежное
' ускорения не зависят от высоты, зато имеется рельеф.
' Рассчётный блок, полностью совместимый с "Лунолётом-3".
' тяга, кориолисова сила
T1 = V + (A * SIN(AL) - U * V / R) * T
X = X + (V + T1) * T / 2
V = T1
' тяга, тяготение, центробежная сила
T1 = U + (A * COS(AL) - G + V * V / R) * T
RR = RR + (U + T1) * T / 2
U = T1
' Отклонение радиуса планеты от нулевой отметки в окресностях начала
' координат задаётся колоколообразной кривой, носящей красивое
' математическое название "локон Аньези".
H = RR - HG / ((X / H2) ^ 2 + 1) - R
RETURN
|
|