А начнем мы с самого наипройстейшего: Астродинамика. Ух, какая интересная наука! Всяким простолюдинам интересно чуть менее, чем
них*я никак, но в узких кругах в роде нашего представляет большую ценность. В данном случае (именно в случае написания подобной программы) интересует, в общих чертах, две вещи: Астродинамика и орбитальные маневры. В принципе, орбитальные маневры -- это часть астродинамики, но я думаю, их лучше рассмотреть отдельно.
А возьмем мы в пример прекрасную игрушку KSP (не Orbiter, просто потому, что в Симуляторе Роскосмоса все это усваивается намного легче, чем в орбитере. Тут сквады молодцы).
Ну таки вотъ. Из чего состоит астродинамика? по сути, давным давно, когда не было компьютеров и ,не дай скотч, ракет, люди думали, что все крутится вокруг солнца, а солнце стоит абсолютно неподвижно. Заметьте --
абсолютно неподвижно. Потом уже люди начали думать о всяких относительностях, ньютонах, и т.д. (ну, я все утрирую, поняли надеюсь), и догадались, что солнце как бы не стоит на месте. Оно движется "хаотично", это я нашел где-то на просторах трудов ученых ХХ веков, не помню где, правда... Не суть. Суть в том, что Солнце "на вид" хаотично. По сути, оно взаимодействует с каждой планетой. Но это взаимодействие настолько мало, что, по сути, и не движется вовсе. Однако, эти, хоть и мелкие, движения, могут сыграть огромную роль в изменении орбит планет. (вспомним "назад в будущее". Надеюсь, все догадались о чем я). Таким образом, если мы хотим действительно большую точность, и никаких погрешностей в вычислениях, типа набора
БЕШЕНЫХ, ПРЯМ ИЗ ПРЕИСПОДНИкоростей, полученных в результате "маленьких погрешностей", то нам нужны... Ну, новые технологии шоле... Из них, я всегда выделял две группы: Внешние вычислители, и "компьютерное" наращивание точности. Внешние вычислители -- это, самый простой пример, видеокарты. Они вычисляют поистине огромные данные, но вот чего в них точно не хватает, так это точности. Говорят, 64-х бит хватает. Так вот: В космосе нифига не хватает. Уж больно велико пространство. Поэтому, чисто теоретически, можно подождать, более точных вычислителей, основаных на 128-битной, а лучше 512-ти (ну, чтоб с запасом).
Компьютерное наращивание точности заключается в... Собственно, себже. Не знаю, как оно происходит програмно, но вот есть такой онлайн-калькулятор web2.0calc.com, который высчитывает аж 1024-битные числа (sic!). Правда, какой ценой... Из-за этого дико страдает скорость. Очень и очень медленно. Особенно, при таком количестве вычислений.
Хорошо. Мы знаем, что чем меньше погрешность, тем лучше. Но как ее использовать во благо?
И тут я расскажу о такой вещи, как N-body (SEr, спасибо за инфу). Это технология пошагового расчета орбит планет (чего добиваемся:
http://m.youtube.com/watch?v=qKp1M4T6z24). То есть на каждый такт, пусть это будет час, программа заново расчитывает все орбиты. Но. Тут есть проблема. Опять же, вычислительная мощность, весь упор идет в нее. Ограничения посчитать не сложно. Если мы возьмем две планеты, то за такт вычислений будет 1 (планета1 к планете2). Три планеты -- 4. Четыре -- 8. Пять -- 16. А теперь, вспомним количество объектов в одной солнечной системе. Около миллиона. И то, я еще слабо взял, потому что есть еще облако Оорта, а еще слилком маленькие астероиды, которые на систему влияют так же, как юпитер на солнце, но все же.<sarcasm> А сколько там планет в млечном пути? 30 миллиардов? Да ладно? А галктик сколько? Вы уверены, что около 5 квадриллионов? А, это вы только предполагаете? А граница вселенной сколько километров? А, ну то есть чуть больше, чем 5000000000000000^30000000000^±10000000 обьектов, верно? </sarcasm>. Вы вообще представляете, какой мощности компьютер должен быть? Я не представляю. Больше всего, я не представляю, сколько веков уйдет на расчет одной секунды. Нувыпонели.
Теперь следующая глава моего рассказа -- оптимизация.
О, оптимизация полезная вещь. Она позволяет не полностью расчитывать все 5000000000000000^30000000000^±1000000 обьектов. Расчитывать все сразу глупо. Почему? Ну просто потому, что гравитация астероида на расстоянии даже парсека хоть и будет (и будет даже на расстоянии четырех гигапарсек. И восьми. И это доказано.) но она будет влиять на вселенную примерно так же, как на человека один рентген радиации -- почти что никак.
Соответственно, можно поговорить о оптимизации. заключается она в следующем:
1) мы берем массу обьекта. Зачастую в силе притяжения играет именно масса ("зачастую" потому, что так или иначе есть другие факторы гравитации. о них не сейчас точно. Спать хочу.). А значит, можно посчитать притяжение между двумя объектами. У нас же есть прекрасная формула! F1=F2=G*(m1*m2/r²), где G -- грави-постоянная, а r -- радиус орбит. Если смотреть по этой формуле, то в принципе, мы можем "оттянуть" орбиту очень легкого астероида ОЧЕНЬ тяжелым звездолетом (надо кстати попробовать смоделировать, так по приколу).
Хорошо, но мы так и не оптимизировали все до конца, продолжаем.
2)некоторые объекты можно вычислять путем "одностороннего притяжения". Как это: Допустим, на высоте 500 км над землей летает резиновый мячик, массой 500 грамм (Лол, щито?). Напоминаю, что масса земли 5974.2 зеттатонн. Это оооочень много. Ну и надо оно, расчитывать влияние этого мячика на землю? Серьёзно? Глупо. Очень и очень глупо. Он может там и повлияет (а ведь через время друг на друга повлияет все. Относительность, херли) но через сколько тысяч тысячилетий? Ну все понятно.
То есть суть 2 пункта: Если очень легкий обьект2 составляет 0.0(n)1% массы (задайте сами процент, я б рекомендовал 0.000000000010%) от обьекта1, то стоит расчитать только влияние тяжелого на легкий.
3) чем меньше обьект,
тем больше его будут называть школотой, тем меньше его влияние
на раёне во вселенной. Но это не значит, что на него ничто не влияет. Поэтому можно (я не знаю правда как это будет в коде выглядеть) запилить что-то вроде последовательного расчета. Сначал отбираются самые
жирные толстые массивные
карликиобъекты, а затем распределяются в порядке убывания
жира массы. Это стоит сделать один раз и редактировать каждый раз, когдапоявлется новый объект (привет, Oracle Dataspace!). Затем сначала ищется самый <s... Не, ну нафиг, хватит черкать... Самый массивный обьект. Затем, к нему пристраивается второй (отрисовывается на карте, если они в разных уголках вселенной, то нет расчета орбит), затем третий, если они не рядом, то идем дальше... И так далее, и так далее.
К чему это нужно? Ну, к тому, что если компьютер не успеет за секунду рассчитать секундный сдвиг планет, то он мог бы сдать работу вовремя, а "недоделаные" обьекты досчитать через пять-десять тактов.
Чуть позже распишу, собственно, планировку орбит для космических кораблей. Всему свое время.
Ну ладно, я уже устал, пора баеньки.