Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Небесная механика в XNA

#c_sharp #xna


Собрался делать космическую игру в 2D на XNA. C# изучаю недавно, параллельно с созданием
совершенствую навыки программирования.
Для космической игры нужно? чтобы игра знала законы небесной механики - чтобы можно
было сделать планету, выходить на орбиту, лететь к другим планетам и т.д. Хотелось
бы знать, как именно сформулировать в XNA эти законы.    


Ответы

Ответ 1



Небесная механика ничем не отличается от обычной механики. У объектов есть мгновенные параметры - координаты, скорость, ускорение. На ускорение влияет набор сил, действующих на объект. В случае "земной механики" мы пренебрегаем силами притяжения от других планет ввиду малости массы земных объектов и большой величины расстояния (формула F = G m1 m2 / R^2) и учитываем только эту силу для планеты Земля. В случае небесной механики это условие "выворачивается" - например, когда космический корабль пролетает рядом с Юпитером, нужно учитывать силу притяжения от Юпитера, но уже можно пренебрегать силой притяжения Земли. Взаимодействие планет и их движение по орбитам опять же определяется тем же самым соотношением из закона всемирного тяготения: Для упрощения подсчетов можно установить для каждой планеты ее фиксированную эллипсоидную орбиту и сформулировать функцию (x, y, z) = F(t), определяющую положение планеты в произвольный момент времени с хорошим приближением к реальности. Осталось только обдумать движение космических объектов в вакууме вдали от всех планет: Здесь все тривиально - объект без двигателей будет продолжать свое движение с заданным вектором скорости до достижения точки, в которой на него начинает существенно влиять какая-либо планета или спутник. Под существенностью подразумевается невозможность пренебречь соответствующей величиной. Если понимать физические принципы, то реализовать это должно быть несложно как на XNA, CryEngine, Unreal Engine, так и на любом современном движке промышленного масштаба. P.S. Стоит отметить, что все вышенаписанное верно только в предположении скоростей, много меньших скорости света в вакууме. Если по каким-либо причинам вы собираетесь качественно моделировать ситуации, где скорости сравнимы со скоростью света, то имеет смысл обратиться к теории СТО / ОТО.

Ответ 2



(Вопрос, конечно, старый, но вдруг кому-то пригодится мой ответ) Небесная механика в общем случае - очень сложная вещь (особенно при попытке обобщения на случай n взаимодействующих объектов). Для того, чтобы считать точно, обычно используют разложение силовой функции для конкретной задачи в виде ряда, берут несколько первых слагаемых этого ряда (скорости определяют, подставляя силовую функцию в лагранжиан системы - все сложно). Если интересно, как это делается, можно посмотреть в классическом учебнике Дубошина. Но на самом деле, так вы игру еще не скоро напишете, потому что умрете на разложении силовой функции. Тем более, что точно в общем виде задачу трех тел, сформулированную еще во времена Пуанкаре, не научились решать до сих пор. Я бы на вашем месте рассматривала объекты как частицы с точечной массой, ну и, например, попробовала реализовать просто ради интереса алгоритм Барнса-Хата. В остальных случаях проще всего начать с школьной кинематики и усложнять уже в процессе.

Комментариев нет:

Отправить комментарий