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

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

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

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

Сообщества

Настроить S2

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



Пишет arvi ([info]arvi)
@ 2006-05-28 14:50:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Гляди в оба -- впереди Фобос!
   Игровая программа «ОС-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