В настоящее время я работаю над проектом на С#, где я играю с планетарной гравитацией, о которой я знаю, является хардкорной темой, которая подходит к ней, но мне нравятся проблемы. Я читал законы Ньютонов и законы Кеплера, но я не могу понять, как получить правильное направление гравитации.
В моем примере у меня всего 2 тела. Спутник и планета. Это должно упростить его, поэтому я могу понять это, но мой план состоит в том, чтобы иметь несколько объектов, которые динамически влияют друг на друга, и, надеюсь, в конечном итоге получится несколько реалистичная многоуровневая система.
Когда у вас есть орбита, тогда у спутника есть гравитационная сила, и это, конечно, в направлении планеты, но это направление не является постоянным. Чтобы лучше объяснить мою проблему, я попытаюсь использовать пример:
скажем, у нас есть спутник, движущийся со скоростью 50 м/с и ускоряющийся к планете со скоростью 10 м/с/с в радиусе 100 м. (все теоретические числа). Если мы скажем, что частота кадров равна 1, то через одну секунду объект будет на 50 единиц вперед и 10 единиц вниз.
Поскольку спутник перемещает несколько единиц в кадре и около 50% от радиуса, гравитационный курс сильно сдвинулся во время этого кадра, но приложенная сила только "вниз". это создает большую погрешность, особенно если объект перемещает большой процент от радиуса.
В нашем примере нам, вероятно, понадобилось бы наше гравюрационное направление, основанное на среднем между нашей текущей позицией и позицией в конце этого кадра.
Как бы это исправить?
У меня есть базовое понимание тригонометрии, но главным образом с упором на треугольники. Предположите, что я глуп, потому что по сравнению с любым из вас, я, вероятно, есть.
(Я сделал предыдущий вопрос, но в итоге удалил его, так как он вызвал некоторую враждебность и был в основном не так хорошо сформулирован, и был ВСЕ к генералу - на самом деле это не был конкретный вопрос. Надеюсь, это лучше., то, пожалуйста, сообщите мне, я здесь, чтобы узнать:))
Просто для справки, это функция, которую я имею прямо сейчас для перемещения:
foreach (ExtTerBody OtherObject in UniverseController.CurrentUniverse.ExterTerBodies.Where(x => x != this))
{
double massOther = OtherObject.Mass;
double R = Vector2Math.Distance(Position, OtherObject.Position);
double V = (massOther) / Math.Pow(R,2) * UniverseController.DeltaTime;
Vector2 NonNormTwo = (OtherObject.Position - Position).Normalized() * V;
Vector2 NonNormDir = Velocity + NonNormTwo;
Velocity = NonNormDir;
Position += Velocity * Time.DeltaTime;
}
Если я плохо сформулировал себя, попросите меня перефразировать части - английский не мой родной язык, и конкретные темы могут быть трудно сформулировать, когда вы не знаете правильных технических терминов.:)
У меня есть подозрение, что это описано в втором законе кплеров, но если это так, то я не уверен, как его использовать, так как я не понимаю его законов в полной мере.
Спасибо за ваше время - это много значит!
(также, если кто-нибудь видит несколько ошибок в моей функции, то, пожалуйста, укажите их!)