Python: расчёт параметров полёта в другую звёздную систему и обратно
Базируясь на расчётах Станислава Володарского (см. ниже) вроде бы удалось построить некую теорию и написать скрипт для расчёта:
'''
Задача: экспедиция стартует из Солнечной системы в другую звёздную систему с постоянным ускорением. Первую часть пути корабль ускоряется,
вторую часть пути летит по инерции, третью часть пути тормозится (с тем же ускорением, но отрицательным, и на таком же участке пути).
К моменту прибытия в другую звёздную систему скорость корабля равна 0. Далее - путь домой, точно по такой же схеме.
Вычислить время полёта туда и обратно в земной системе отсчёта, время полёта туда и обратно в системе отсчёта корабля, максимальную скорость корабля.
'''
import os
import math
print("-" * 65 + "\nРасчёт параметров полёта в другую звёздную систему и обратно:\n" + "-" * 65)
c = 1 # скорость света: 1 световой год / год
a = 2 # ускорение корабля: 1 световой год / год ** 2 = 9,5 м / c ** 2 (близко к значению ускорения свободного падения на поверхности Земли)
star = "Фомальгаут"
l = 25 # расстояние до звёздной системы (световых лет)
l_a = l * 0.1 # расстояние, пройденное в режиме разгона (торможения) в одну сторону (световых лет)
l_i = l * 0.8 # расстояние, пройденное в режиме движения по инерции в одну сторону (световых лет)
# время разгона (торможения) в одну сторону в земной системе отсчёта (лет)
t1 = c / a * math.sqrt((a * l_a / c ** 2 + 1) ** 2 - 1)
# время разгона (торможения) в одну сторону в системе отсчёта корабля (лет)
t2 = (c / a) * math.asinh(a * t1 / c)
# максимальная скорость корабля, которую удалось достичь (долей скорости света)
v = c * math.tanh(math.asinh(a * t1 / c))
# время движения по инерции в одну сторону в земной системе отсчёта (лет)
t1_i = l_i / v
# время движения по инерции в одну сторону в системе отсчёта корабля (лет)
t2_i = t1_i * math.sqrt(1 - (v / c) ** 2)
# общее время полёта в земной системе отсчёта (лет)
t1_full = 4 * t1 + 2 * t1_i
# общее время полёта в системе отсчёта корабля (лет)
t2_full = 4 * t2 + 2 * t2_i
# Вывод результатов
print(f"Звёздная система: {star}")
print(f"Расстояние до звёздной системы (световых лет): {l: .2f}")
print(f"Ускорение корабля (световых лет / (год ** 2)): {a: .2f}")
print(f"Расстояние, пройденное в режиме разгона (торможения) туда и обратно (в %): {4 * l_a / l: .2%}")
print(f"Расстояние, пройденное в режиме движения по инерции туда и обратно (в %): {2 * l_i / l: .2%}")
print(f"Время полёта туда и обратно в земной системе отсчёта (лет): {t1_full: .2f}")
print(f"Время полёта туда и обратно в системе отсчёта корабля (лет): {t2_full: .2f}")
print(f"Максимальная скорость корабля (% от скорости света): {v: .2%}")
print("\nНажмите любую клавишу для продолжения...")
os.system("pause > nul")
Вот результат:
-----------------------------------------------------------------
Расчёт параметров полёта в другую звёздную систему и обратно:
-----------------------------------------------------------------
Звёздная система: Фомальгаут
Расстояние до звёздной системы (световых лет): 25.00
Ускорение корабля (световых лет / (год ** 2)): 2.00
Расстояние, пройденное в режиме разгона (торможения) туда и обратно (в %): 40.00%
Расстояние, пройденное в режиме движения по инерции туда и обратно (в %): 160.00%
Время полёта туда и обратно в земной системе отсчёта (лет): 52.40
Время полёта туда и обратно в системе отсчёта корабля (лет): 11.72
Максимальная скорость корабля (% от скорости света): 98.60%
Ответы (2 шт):
Что-то я не очень понимаю, что вы там считаете, как именно вы учитываете релятивистские эффекты. Есть ссылка на текст, где эти формулы можно посмотреть?
А с самим полётом основная проблема в том, что время полёта вы считаете чисто на основе величины ускорения. То, что вы физически не можете в реальности разогнаться даже до 0.9 скорости света, вы не учитываете. Я посмотрел, у вас там максимальная скорость в середине пути получается 441 тыс.км/с, такого в реальности достичь нельзя, конечно. И не только из-за физического ограничения на максимальную скорость физических частиц, которая равняется скорости света, но и ещё из-за того, что чем больше вы хотите разогнаться, тем больше (экспоненциально больше) нужно будет прикладывать усилий. Просто невозможно иметь столько топлива на ракете, чтобы так разогнаться.
В общем, задайте максимальную скорость как хотя бы 0.9c (а реалистичнее 0.7c, например), а потом посчитайте, сколько времени займёт разгон до этой скорости, ну и в результате у вас будет три участка пути:
- разгон до максимальной скорости
- движение на максимальной скорости
- торможение до нулевой скорости И это даже ещё без учёта релятивистских эффектов, которые надо ещё подумать, как тут вообще применить.
А то, что вы там взяли 0.99c за максимум, так до этой скорости разгоняются только протоны в ускорителе, да и то с большим трудом и специальными ухищрениями. Разогнать до этой скорости физическое тело наших масштабов, а не маленькую частицу - задача просто не реальная.
В общем, возможно, у вас даже и не сильно больше время полёта будет после пересчёта, но тут нужно всё-таки смотреть формулы, сколько понадобится энергии при разгоне ракеты до больших скоростей. Скорее всего там будет получаться, что просто не реально продолжать разгоняться тем же темпом при достижении какой-то скорости. Даже имея большие запасы топлива. Чем больше скорость, тем больше потребуется энергии на дополнительный разгон. Скорее всего, все расчёты поэтому обычно ограничивают какой-то небольшой скоростью, из-за этого ракета и должна долго лететь.
import math
print("-" * 50 + "\nРасчёт времени полёта до другой звёздной системы:\n" + "-" * 50)
d = 4.3 # расстояние до звёздной системы в световых годах
c = 1 # скорость света: 1 световой год / год
a = 1 # ускорение: 1 световой год / год^2 = 9,5 м/c^2 (близко к значению ускорения свободного падения на повержности Земли)
d1 = d / 2 # половина пути в одну сторону
# земное время достижения половины расстояния
t1 = ((d1 * a / c ** 2 + 1) ** 2 - 1) ** 0.5 * c / a
# скорость по окончании разгона - максимальная скорость
u1 = a * t1 / (1 + (a * t1 / c) ** 2) ** 0.5
# корабельное время по окончании разгона - половина корабельного времени полета
tau1 = c / a * math.log((1 + (a * t1 / c) ** 2) ** 0.5 + a * t1 / c)
# Расчёт времени полёта в земной системе отсчёта:
t_earth = 2 * t1
# Расчёт времени в системе отсчёта корабля:
t_ship = 2 * tau1
# Вывод результатов
print(f"Расстояние до звёздной системы (световых лет): {d:.2f}")
print(f"Ускорение корабля (световых лет / (год ^ 2)): {a:.2f}")
print(f"Время полёта в одну сторону в земной системе отсчёта (лет): {t_earth:.2f}")
print(f"Время полёта в одну сторону по часам на корабле: {t_ship:.2f} лет")
print(f"Максимальная скорость корабля: {u1:.2%} от скорости света")
$ python starship.py -------------------------------------------------- Расчёт времени полёта до другой звёздной системы: -------------------------------------------------- Расстояние до звёздной системы (световых лет): 4.30 Ускорение корабля (световых лет / (год ^ 2)): 1.00 Время полёта в одну сторону в земной системе отсчёта (лет): 5.97 Время полёта в одну сторону по часам на корабле: 3.63 лет Максимальная скорость корабля: 94.83% от скорости света