Я разрабатываю планетарный симулятор в Unity 3D (C#), и мне нужна помощь, однако я чувствую, что это было бы лучшим местом для этого. Я начинаю свою планету с вектора положения. При инициализации я применяю вектор направления, который переводит его на орбиту вокруг более крупной звезды. Орбиты не круговые, и я бы хотел, чтобы они были эллиптическими.
Я читал про фокусы, большую полуось и малую полуось, про несколько законов Ньютона и Кеплера, я понимаю апоцентр и перицентр, но никак не могу понять, что мне нужно делать. Что я сделал, так это оставил след от планет, и можно было увидеть их орбиты. (примечание: я знаю, что расположение планет неправильное!)
Выглядит красиво, но это не то, что я хотел. Я хотел бы иметь возможность предсказывать орбиту. Я нашел уравнения, чтобы рассчитать сферу влияния, для которой нужна большая полуось. Я мог бы вычислить большую полуось, если бы у меня было время обращения, и я мог бы вычислить время обращения, если бы у меня была большая полуось. Однако у меня есть только начальное положение, вектор силы, которую я применил к нему, расстояние между планетами, а также массы каждой из них. Я в тупике, я не знаю, что ищу. Может ли кто-нибудь дать мне несколько указателей (или формул), чтобы сделать то, что я хотел бы сделать.
Буду очень признателен за любую помощь, заранее спасибо!
В трех измерениях вам нужно шесть чисел. Вы спрашиваете, как преобразовать один набор из шести чисел, трех координат положения и трех компонентов скорости (обратите внимание, что простого направления недостаточно) в другой набор из шести чисел, шесть элементов орбиты.
Я не собираюсь давать вам уравнения, но я вас начну. Вы можете погуглить уравнения. Сначала вычислите энергию, скаляр. Это скажет вам, находится ли он на орбите (отрицательная энергия) или на гиперболе (положительная энергия). Из энергии вы можете легко вычислить большую полуось. Затем вычислите вектор углового момента. Направление этого вектора покажет вам плоскость траектории и направление в этой плоскости (этот вектор перпендикулярен плоскости траектории). Затем вычислите вектор эксцентриситета. Этот вектор будет лежать в плоскости и будет указывать на перицентр или ближайший подход к гиперболе. Его величина — это, конечно же, эксцентриситет орбиты или гипербола.
Тогда у вас будет все необходимое для создания элементов орбиты.
Эта подпрограмма JPL/NAIF SPICE, инструментарий OSLT, отвечает на вопрос о проблеме двух тел.
NB Я предполагаю, что ваш «вектор направления» на самом деле является «вектором скорости»; вход СОСТОЯНИЯ в ОССКЕЛТ представляет собой шестиэлементный вектор, представляющий собой конкатенацию векторов положения и скорости.
NB, как отмечалось выше, вам нужно седьмое число: MU, значение GM для центрального тела.
Технически вам также нужно восьмое число, время начальных условий, чтобы иметь отправную точку для расчета будущих (и прошлых) эфемерид.
Эта ссылка предназначена для FORTRAN-версии инструментария SPICE, потому что именно ее Google вернул первой. Существуют также C, IDL, Matlab, Java и даже неофициальные интерфейсы Python для SPICE; создание DLL C-версии, которая может быть вызвана из C#, должна быть возможной.
Я не буду делать это дольше, чем это должно быть: покопайтесь в страницах SPICE; SPICE имеет крутую кривую обучения, но оно того стоит. Документация является лучшей, которую вы можете найти где угодно, или свяжитесь со мной для получения более подробной информации.
Простите отсутствие конкретного ответа, но это действительно зависит от того, насколько точным вам нужно быть. Однажды я написал симулятор, в котором использовалось ньютоновское приближение n тел. Это было хорошо, но не очень хорошо реализовано и могло поддерживать только пару десятков тел, прежде чем оно замедлилось до ползания.
KSP использует более простой и масштабируемый подход; космический корабль притягивает только тело, в сфере влияния которого он обитает, а планеты и луны ходят по рельсам. Это достаточно близкое приближение для видеоигры, и оно не выходит из-под контроля, когда вы добавляете в симуляцию новые объекты. Компромисс заключается в том, что это означает, что вас одновременно привлекает только один объект, поэтому вы не видите точек Лагранжа или других интересных гравитационных эффектов.
Даже хорошо реализованная ньютоновская модель n тел будет намного более затратной в вычислительном отношении, чем система KSP, и все равно не расскажет всей истории, поскольку ньютоновская физика не принимает во внимание релятивистские эффекты. (Если вы думаете, что релятивистские эффекты не имеют значения для орбитальной механики, почитайте о планете Вулкан: https://en.wikipedia.org/wiki/Vulcan_(hypothetical_planet) )
Возможно, стоит задать этот вопрос при обмене стеками разработки игр, поскольку решение о том, как лучше всего приблизить орбиту, имеет столько же общего с типом игрового процесса, который вы хотите, и с практическими ограничениями доступного вычислительного оборудования, сколько с физикой. орбитальная механика.
Дэвид Хаммен
2012rчемпион
Спросите о Монике