Pull to refresh
10
0
Send message
Таким образом, шаг за шагом, можно рассчитать «идеальную партию»
Данная статья подтолкнула меня к написанию двух симуляторов — солнечной системы и полета управляемой ракеты в ней.
Так что путь автора повторить можно :-)
Неприятно осознавать, что такую задачу на собеседовании я бы не решил за разумное время (15 мин)
Вряд ли интервьювер бы ждал больше. (Под решением я подразумеваю рабочий код)

С другой стороны в условиях коммерческой разработки с жесткими дедлайнами и высокими требованиями к качеству продукта я работаю вполне успешно.

Я вижу два объяснения:

1. Я достаточно жестко «вошел в колею» — проектирую, пишу код в соответствии со стандартами, отдаю в тестирование, деплоймент на продакшн, поддержка. Сложно перестроиться на что-то новое.

2. Задача достаточно сильно оторвана от жизни.
Луну и вывод на круговую окололунную орбиту добавил. (В заметке есть ссылка на видео правда не очень хорошего качества. ЮТьюб как-то пережимет по-своему)
Для этого понадобилось еще 3 включения двигателя:
1. Перевод с круговой околоземной орбиты на орбиту Земля — Луна
2. Торможение возле Луны и перевод на некую промежуточную орбиту. По этой орбите ракета облетает Луну и направляется обратно к Земле…
3. Еще одно торможение и перевод на круговую орбиту вокруг Луны.

Пока не удалось совместить 2 и 3

В планах — освоить метод Дормана-Принца.

Ну и более «пологий» вывод на околоземную…

Есть много других планов, но об этом пока рано говорить.
Спасибо. Исправлено.

На сайте, откуда я копировал, тоже небыло авторства.
Жизнь коротка чтобі ставить неинтересніе задачи :-)
Зачет. Я тоже таким баловался. Давно :-)
Я счас считаю считаю полную N-body problem
Добавил вадео выхода на окололунную орбиту
:-)

Спасибо за веру в мои скромные способности.

Этот комментарий и послужил толчком для переделки :-)

Ясно. Я провел некоторые исследования для системы из двух тел. Действительно, траектория остается на своем месте.
Вот система из двух тел, расстояние между ними при наименьшем и наибольшем удалении:

DIST MAX:  399.9574673146623
DIST MIN:  76.50692564029397
DIST MAX:  400.05701238567127
DIST MIN:  76.29682103619999
DIST MAX:  400.10700291341266
DIST MIN:  76.61843705129094
DIST MAX:  400.1784335186475
DIST MIN:  76.31096590098528
DIST MAX:  400.2307990384789
DIST MIN:  76.5429266917722
DIST MAX:  400.30332627343995
DIST MIN:  76.22592172937536
DIST MAX:  400.3598982590168
DIST MIN:  76.33347805866529
DIST MAX:  400.41598111793627
DIST MIN:  76.44551804585252
DIST MAX:  400.47259940381394
DIST MIN:  76.53783120028531
DIST MAX:  400.53049654382465
DIST MIN:  76.5940516130298


Еще раз спасибо.
Терзают меня смутные сомнения…

Я записал сумму всех сил, разложил по осям Х и У
И для каждой из осей применил метод Рунге-Кутты.

Соменение состоит в том, не потерял ли я чего-то важного при таком подходе. Все-же координаты зависимы, т.е. делать так нельзя. Но с другой стороны эта связь учтена в формуле:
        ax = (сумма) M0 * (X0 - x) / r**3
        ay = (сумма) M0 * (Y0 - y) / r**3

где r — расстояние между двумя телами.

Спасибо всем кто подскажет.
ЧЕРТ ПОБЕРИ!

У меня получилось!
Несколько дней изучения и чтения «Нежестких задач» и я осилил метод Рунге-Кутты!!!
Мне удалось сбалансировать систему в новом проекте за 5 минут, при том, что методом Эйлера я целую неделю мучался подбором параметров и стабилизацией траектории!!!

Всем огромное спасибо!
Да. Я именно про п.3 говорил.
Попервах у меня наслаивалось следующее значение на предыдущее. Простой баг был :-)
Удалось разные конфигурации запустить (ключ -f и имя .ini файла)?
Не очень понял с ускорениями.
Я бы советовал двигаться в сторону второго закона Ньютона. А именно — ускорение считать как Ai = Sum(Fij)/m, где Fij — сила взаимного притяжения тел (Fij = G * mi * mj * (Xi — Xj) / (rij ^ 3), тут записано в векторной форме).

Я ж точно так и делал. Только сразу сократил m и оперировал не понятием «сила», а понятием «ускорение» :-)

Мне уже подсказали воспользоваться другими численными методами. Возможно, я так и поступлю, если удастся осилить. Университетский курс численных методов требует много времени. Школьный курс физики намного менее требовательный.
Да, тут я вынужден согласиться. На момент написания я помнил только закон всемирного тяготения и 2-й закон Ньютона. Пробел в этой области
Но теперь я знаю что есть метод Эйлера и метод Рунге-Кутты.

Спасибо за ссылки. Ознакомлюсь.
Точно, так и есть…

Буду осваивать новый метод. Есть над чем поработать теперь.

Огромное спасибо.

Ага. Прочитал, что до 3.3 configparser назывался ConfigParser

The ConfigParser module has been renamed to configparser in Python 3. The 2to3 tool will automatically adapt imports when converting your sources to Python 3

Может, это поможет.
Я попробую откомпилировать вечером в.ехе
Да, иногда бывает сложно поймать стабильную комбинацию :-) Чем больше планет тоем тоньше грань.

Попробуйте Питон 3.3, если есть возможность.
Все должно запуститься.
1

Information

Rating
Does not participate
Registered
Activity