Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет arvi ([info]arvi)
@ 2006-05-25 18:55:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Самое увлекательное приключение 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