Помощь с декартовыми векторами состояний → Элементы кеплеровской орбиты C#

РЕДАКТИРОВАТЬ

В настоящее время я пытаюсь попробовать стандартное преобразование декартовых векторов состояния в элементы кеплеровской орбиты, но у меня возникают проблемы с формулами и использованием векторов. Моя предпосылка для этого заключается в том, что я могу обойтись без простых вычислений, таких как скорость, период, которые я могу сделать довольно легко. Я использовал следующие ресурсы: Это , Это , Это и, наконец, учебник « Основы астродинамики » Бейта, Мюллера, Уайта .

Я рассчитал вручную, а затем воспроизвел на С#, как показано ниже. С некоторыми приблизительными начальными значениями:

в "=" 7770   у ^   (РС)

р "=" 6771000   Икс ^   (м)

мю "=" 4.0 Е+ 14   (м³/с²)

До сих пор мне удалось успешно использовать следующие формулы:

ЧАС "=" р × в

М "=" 1 2 в 2 мю р

п "=" ЧАС 2 мю

а "=" мю 2 М

е "=" 1 п а ,

где ЧАС - вектор углового момента, М - полная энергия (инерционная система отсчета), p - полуширокая прямая кишка, e - эксцентриситет, и р и в р и в ) - векторы положения и скорости (и величины).

Однако у меня возникают проблемы с попыткой выполнить следующие действия:

н ^ "=" К ^ × час
(как видно из PG61 Книги, упомянутой выше)

И правильно используя:

е "=" в × час мю   р | | р | |

В PDF это показано как:

н ^ "=" ( 0 , 0 , 1 ) Т × час "=" ( час у , час Икс , 0 ) Т

Я не уверен, что подключать или как использовать эти типы формул (или у меня даже есть информация)

Я включил часть своего кода C#, чтобы вы могли видеть ход моих мыслей.

double V = 7770;
double R = 6771000;
double Mu = 4e+14;

Vector velocity = new Vector(0, V);
Vector Radius = new Vector(R, 0);      

double H = Vector.CrossProduct(Radius, velocity);// Angular Momentum
double M = (Math.Pow(V, 2) / 2) - (Mu / R);//Mechanical Energy
double p = Math.Pow(H, 2) / Mu;// Semi-Latus Recum 

double a = -Mu / (2 * M);//Semi-Major Axis? Comes out only 40km less than 
SLR and no where near the correct SMA.
double test = Vector.Multiply(Radius, velocity);//test dot product.

//double e = Math.Sqrt(1 - p / a);//Eccentricty ? No where near correct 
vaule.
//double e2 = (Math.Pow(V, 2) - Mu / R) * Radius - test * velocity / 
Mu);//Eccentricty ?

Я возился с кодом и читал материалы около двух месяцев, и я добился некоторого прогресса, но отсутствие опыта в вычислении векторов меня подводит. Помогите с примерами, которые я могу перепроектировать или лучше понять, что мне нужно сделать, чтобы начать работу.

Я добавил форматирование MathJax для уравнений, которые кажутся такими же, как показано в вашем блоке кода C#, без внимания к тому, верны они или нет. Это облегчит понимание того, что вы делаете, для тех, кто не «думает кодом».
Это действительно отличное редактирование, и оно намного яснее, что вы уже знаете и пробовали, и что вы хотели бы сделать дальше. Отличная работа!
@notovny вопрос был отредактирован; Вы можете попробовать еще раз.
Одна из проблем заключается в том, что ваш код использует 2D-векторы, которые только продвинут вас в этом процессе. Например, н ^ по своей сути является трехмерной конструкцией, поскольку указывает на узел орбиты.
@Crhis, так что, если бы я использовал Vector3D, это было бы лучше? Что бы я использовал для K?
@Nzjeux да, для полного преобразования вам понадобятся 3D-векторы. К ^ это просто ось z, если опорный кадр, поэтому вы можете использовать (0,0,1), как говорится в PDF-файле, на который вы ссылаетесь.

Ответы (1)

Я опубликую предварительный ответ, потому что комментарии не позволяют достаточно места. Я всегда использую уравнение vis-viva для таких вещей. Если вы просто вычисляете энергию или положение и скорость в фиксированной точке (особенно в апсидах), это немного быстрее, потому что используются только скаляры:

в 2 "=" мю ( 2 р 1 а )

Переверните это, чтобы получить:

а "=" 1 ( 2 / р в 2 / мю )

С вашими исходными значениями я получаю значение для а около 6923046 м, что больше вашего начального радиуса, поэтому вы начали с перицентра. Параметр р п е р я до 6771000 м и с использованием е "=" 1 р п е р я / а Я получаю эксцентриситет около 0,02196.

По определению вы начали с одной из апсид, так как р и в перпендикулярны. Задача только выяснить, какой именно.

Спасибо за ответ и извините за большую задержку. Я уже могу сделать, как вы описали, я больше смотрел на вычисление элементов орбиты из вектора положения и скорости, но не понимаю, как применять некоторые формулы.
@Nzjeux Понятно. Вопрос о том, как реализовать формулы на конкретном языке программирования, на самом деле является вопросом о программировании, и поэтому он выходит за рамки актуальности в Space Exploration SE. Я все еще не совсем уверен , в чем именно заключается ваш вопрос. Я считаю, что здесь есть и другие ответы, которые дают пошаговое объяснение преобразования вектора начального состояния. ( р , в ) к кеплеровским элементам, я постараюсь их поискать, и вы тоже. Можете ли вы сократить свой вопрос и более четко объяснить (в вопросе), какой ответ будет полезным?
Я отредактировал вопрос, чтобы он лучше соответствовал тому, что я спрашивал, а также еще немного прочитал материал. Был так занят на работе, что не было времени вникнуть в нее. Также хотелось бы поблагодарить вас за терпение.