
Не знаю, как обойтись без спойлеров. Можно было бы ограничиться обобщённым вопросом, касающимся физики, но если вы следите за прекрасным научно-фантастическим сериалом на SyFy, «The Expanse» [Пространство], можете закрыть вкладку и пойти почитать что-нибудь ещё – например, почему нельзя лететь со скоростью света.
Не закрыли? Хорошо. Задача следующая: мой космический корабль движется по орбите вокруг Солнца где-то в поясе астероидов между Марсом и Юпитером, и мне нужно уничтожить некий астероид. Возможно, что наилучшим способом для этого будет отправка его в сторону Солнца. Могу ли я врезаться в этот астероид так, чтобы он упал на Солнце?
Задача сложная, но её можно разбить на три части: полёт к астероиду, столкновение с астероидом и результирующая траектория астероида. Но сначала нужно сделать несколько предположений. Примерные цифры я возьму из The Expanse, поскольку там всё уже подсчитано.
• Астероид – Эрос. Он двигается по круговой орбите вокруг Солнца (на самом деле это не так, но достаточно близко), радиус орбиты – 1,5 а.е. (1 а.е., астрономическая единица – расстояние от Солнца до Земли). Масса Эроса – 6,7 * 1015.
• Космический корабль – Наву, большое судно для межзвёздных путешествий. По сути это цилиндр радиусом 0,25 км и длиной 2 км. Начальное орбитальное расстояние – 2,5 а.е.
• В Наву много пустого пространства, поэтому примем его плотность за 1000 кг/м3. По формуле объёма цилиндра получим массу в 4 * 1010кг. Довольно массивный корабль!
• И понадобится ещё одна прикидка – реактивная сила Наву. Если на борту есть люди, то, скорее всего, вам потребуется ускорение в 1 g (9,8 м/с2). Без людей пусть ускорение будет 2 g.
Вот и все предположения.
Часть 1: полёт к Эросу
Я хотел разработать численную модель для подсчёта траектории и силы удара Наву. Но не буду этого делать. Орбитальная механика очень сложна. Нельзя просто сказать: «Направьте корабль к Эросу и запустите двигатели».
Для наилучшего результата нужно, чтобы корабль совершил лобовое столкновение с Эросом. Если радиус круговой орбиты Эроса 1,5 а.е., то его скорость составляет 24 000 м/с. Наву перемещается со скоростью в 19 000 м/с. Сможет ли Наву набрать орбитальную скорость в 24 000 м/с в противоположном орбитальном направлении?
С ускорением в 2 g понадобится чуть больше 30 минут, чтобы перейти от 19 000 м/с в одном направлении к 24 000 м/с в противоположном. Да, мне это тоже кажется странным. Но результат принимаю: итак, лобовое столкновение между Эросом и Наву, двигающимися каждый со скоростью в 24 000 м/с.
Часть 2: столкновение
Можно было бы, конечно, ограничиться простым одномерным неупругим столкновением между Наву и Эросом, после которого они остаются вместе. Это прекрасный вопрос для экзамена, но я хочу достичь большего. Я создам нечто более реалистичное – частично упругое столкновение (сохраняется импульс, но не кинетическая энергия), и проходить оно будет не совсем в одном измерении.
Для моделирования столкновения можно представить два объекта в виде пружин. Когда они приблизятся на расстояние меньшее, чем сумма их размеров (и начнут перекрывать друг друга), их начинает расталкивать сила пружины. Чем больше они пересекаются, тем больше сила. Более того, можно сделать это столкновение неэластичным, используя меньшую по величине константу пружины в момент, когда объекты движутся друг от друга.
Перейдём к столкновению. Наву у меня двигается прямо к Эросу, но они не выровнены по центру. И вот, как сработает их столкновение. Отмечу, что Эрос у нас сферический (не соответствует действительности), а Наву по сравнению с ним небольшой. В оригинальной статье можно нажать кнопку play и посмотреть анимацию.
#mass of erors
me=6.7e15
#radius of erors
re=15e3
erors=sphere(pos=vector(-5*re,0,0), radius=re)
#starting momentum
erors.p=me*vector(24000,0,0)
startp=erors.p #used to caclulate change
#length of Nauvoo
L=2e3
#Nauvoo starts off axis
nauvoo=cylinder(pos=vector(5*re,.4*re,0), axis=vector(2e3,0,0), radius=250)
#mass of Nauvoo
nauvoo.m=4e10
nauvoo.p=nauvoo.m*vector(-24000,0,0)
attach_trail(nauvoo)
attach_trail(erors)
#k is the effective spring constant
k=1e12
t=0
dt=0.001
#lastr is used to determine if the spring is compressing or relaxing
lastr=nauvoo.pos-erors.pos
#e is the modifier to spring constant for relaxing
e=.1
while t<7:
rate(1000)
r=nauvoo.pos-erors.pos
F=vector(0,0,0)
if mag(r)<(erors.radius+L/2):
F=k*mag(r)*norm(r) #this is force on nauvoo
if mag(r)>mag(lastr):
F=e*k*mag(r)*norm(r)
nauvoo.p=nauvoo.p+F*dt
erors.p=erors.p-F*dt
nauvoo.pos=nauvoo.pos+nauvoo.p*dt/nauvoo.m
erors.pos=erors.pos+erors.p*dt/me
t=t+dt
lastr=r
print("Eros change in v = ",(erors.p-startp)/me," m/s")
Обратите внимание, что выводимое программой изменение в векторной скорости Эроса оказывается крохотной. Проблема в том, что Эрос примерно в 10 000 раз массивнее Наву. Хотя Наву и Эрос испытают одинаковое изменение импульса, масса Эроса приведёт к совсем небольшому изменению его скорости. Даже если бы Наву передвигался в 100 раз быстрее, это не сильно бы помогло.
Часть 3: падение на Солнце
Поскольку Наву не сможет серьёзно изменить скорость Эроса, эта часть кажется глупой. Но это меня не остановит. Отмечу лишь, что до этого я уже писал о моделировании физики падения на Солнце. Вам может показаться, что упасть на Солнце очень легко – но это не так.
Вместо изменения скорости из моего расчёта столкновения я приму, что какое-то невероятно обалденное столкновение приведёт к тому, что скорость Эроса изменится на 10 000 м/с. Затем я смоделирую два столкновения. Первое приведёт к тому, что результирующий вектор скорости будет показывать на Солнце. Второе просто замедлит Эрос.
Эта модель демонстрирует два указанных удара (первый – жёлтый цвет, второй – красный), и для сравнения – старую орбиту.
G=6.67e-11
Ms=1.989e30
AU=1.496e11
g=9.8
f1=series(color=color.red)
sun=sphere(pos=vector(0,0,0), radius=4e9, color=color.yellow)
eros=sphere(pos=vector(1.5*AU,0,0), radius=sun.radius/7)
eros.m=6.687e15
ve=sqrt(G*Ms/mag(eros.pos))
eros.p=eros.m*ve*vector(0,1,0)
attach_trail(eros)
dv=1e4
erosA=sphere(pos=eros.pos, radius=eros.radius, color=color.yellow)
erosA.m=eros.m
erosA.p=erosA.m*(vector(0,ve,0)+vector(-dv,0,0))
erosB=sphere(pos=eros.pos, radius=eros.radius, color=color.red)
erosB.m=eros.m
erosB.p=erosB.m*(vector(0,ve,0)+vector(0,-dv,0))
attach_trail(erosB)
attach_trail(erosA)
t=0
dt=1e3
while True:
rate(10000)
re=eros.pos-sun.pos
reA=erosA.pos-sun.pos
reB=erosB.pos-sun.pos
Fe=-G*Ms*eros.m*norm(re)/mag(re)**2
FeA=-G*Ms*erosA.m*norm(reA)/mag(reA)**2
FeB=-G*Ms*erosB.m*norm(reB)/mag(reB)**2
eros.p=eros.p+Fe*dt
erosA.p=erosA.p+FeA*dt
erosB.p=erosB.p+FeB*dt
eros.pos=eros.pos+eros.p*dt/eros.m
erosA.pos=erosA.pos+erosA.p*dt/erosA.m
erosB.pos=erosB.pos+erosB.p*dt/erosB.m
t=t+dt
Что произойдёт? Вас удивит, что толчок Эроса в сторону Солнца на самом деле приведёт к тому, что он будет отдаляться от него. Лучший вариант – замедлить Эрос, но если только вы не остановите его полностью, он не упадёт на Солнце.
Но ведь всё равно в итоге Наву не столкнулся с Эросом. Ой. Спойлер…