Re: Космическая физика для ракет, космических кораблей - PullRequest
1 голос
/ 02 сентября 2011

В этой весьма полезной статье CodeProject предприимчивый и очень услужливый человек сделал математику, необходимую для того, чтобы ньютоновская ракета поразила ньютоновскую цель (она также работает для согласования курса и скорости между космическими кораблями, снемного перемешивания входов).

Одна из вещей, которые я написал с этим в прошлом, это битва между сотнями космических кораблей (блоков), стреляющих ракетами (блоками) друг в друга.Совершенно аккуратно.

Однако, это работает только для чисто ньютоновских кораблей, и, как вам скажет любой, кто уделил внимание полету в большинстве космических симуляторов (или кому нравятся спекулятивные методы FTL), ньютонов не единственный способлетать.

И мне кажется, что со всем этим замечательным компьютерным оборудованием должна быть компьютерная программа, которая может принимать, скажем, p + v * t + 0.5 * a * t * t = P+ V * t + 0.5 * A * t * t и выплевывать уравнения, которые дадут вам t и A (или a, в зависимости от того, находится преследователь слева или справа).

Алгебратор подходит ближе всегочто я нашел (MATLAB может быть в состоянии это сделать, но у меня есть Не с бюджетом в 2100 долларов), но он не работает, если я заменяю 1-столбцовую, 2-рядную векторную "матрицу".(У меня 4.2, а не 5)

Итак - Помогите мне устроить бойню среди звезд?Я не злой инопланетный повелитель, чтобы победить MiB, обещаю!: D

Редактировать: я не ищу решения уравнений;Я ищу программное обеспечение, которое может дать мне эти уравнения решения.

Спасибо.

1 Ответ

1 голос
/ 02 сентября 2011

Я все еще не совсем уверен, что вы пытаетесь сделать. Если вы хотите решить алгебраическое уравнение во время написания кода, Wolfram Alpha весьма полезна, например, http://www.wolframalpha.com/input/?i=Solve%5Bq0+%2B+v0+t+%2B+a0%2F2+t%5E2+%3D%3D+q1+%2B+v1+t+%2B+a1%2F2+t%5E2%2C%7Ba1%2Ct%7D%5D.

Если вы хотите решить алгебраическое уравнение во время выполнения, это вообще очень сложная проблема. Если вы дадите мне больше информации о том, что именно вы пытаетесь сделать, я мог бы порекомендовать несколько хороших бесплатных пакетов.

РЕДАКТИРОВАТЬ: Пример проблемы, которую вы, возможно, пытаетесь решить:

В: Учитывая космический корабль с начальной позицией q0, начальной скоростью v0 и постоянным ускорением a0 и ракетой с начальной позицией q1, я хочу найти скорость ракеты v1 с магнитудой M, которая в конечном итоге приведет к столкновению ракеты с космический корабль.

A: Вы пытаетесь решить систему уравнений

q0 + v0 t + 1/2 a0 t^2 = q1 + v1 t
v1 . v1 = M^2

для вектора v1, где время удара t также неизвестно. Насколько я могу судить, эту систему очень трудно решить в закрытом виде: Wolfram Alpha задыхается, и даже Mathematica испытывает трудности. Это, однако, относительно просто атаковать его численными методами. Для этого сначала решим для t, вставив первое уравнение во второе:

(q0 - q1 + v0 t + 1/2 a0 t^2) . (q0 - q1 + v0 t + 1/2 a0 t^2) == M^2 t^2

Это квартичный многочлен от t с известными коэффициентами:

[(q0 - q1).(q0-q1)] + [2 (q0 - q1).v0] t + [v0.v0 + (q0-q1).a0 - M^2] t^2 + [v0.a0] t^3 + [1/4 a0.a0] t^4 = 0

Все в скобках - это скаляр, который вы можете вычислить по известным величинам. Чтобы найти корни этой части, используйте средство поиска корня черного ящика (я настоятельно рекомендую Jenkins-Traub: код C ++, доступный по адресу www.crbond.com/download/misc/rpoly.cpp, версии Java и Fortran также распространяются по всему «нетто).

Как только у вас появятся корни, выберите наименьший положительный (этот будет соответствовать направлению, при котором ракета попадает на космический корабль как можно раньше), и включите его в первое уравнение, и тривиально решите для v1.

EDIT2:

Q: Учитывая космический корабль с начальной позицией q0, начальной скоростью v0 и постоянным ускорением a0, и ракетой с начальной позицией q1 и начальной скоростью v1, я хочу найти ускорение ракеты a1 с величиной M, которое вызовет ракету в конечном итоге столкнуться с космическим кораблем.

A: Эта проблема очень похожа на первую; ваши уравнения сейчас

q0 + v0 t + 1/2 a0 t^2 = q1 + v1 t + 1/2 a1 t^2
a1 . a1 = M^2

Где a1 и t неизвестны. Опять же, эти уравнения могут быть объединены, чтобы получить квартику в t с известными коэффициентами:

[(q0 - q1).(q0-q1)] + [2 (q0 - q1).(v0-v1)] t + [(v0-v1).(v0-v1) + (q0-q1).a0] t^2 + [(v0-v1).a0] t^3 + [1/4 a0.a0 - 1/4 M^2] t^4 = 0

Опять же, используйте Jenkins-Traub, чтобы найти корни, затем вставьте наименьший положительный корень в первое уравнение и решите для a1.

...