Помощь в математической модели
|
|
GV_FiQst | Дата: Пятница, 27.11.2015, 00:19 | Сообщение # 1 |
Строитель Миров
Группа: Команда SE
Украина
Сообщений: 1062
Награды: 3
Статус: Offline
| Всех приветствую! Давненько я не был на этом сайте :( У меня есть проблема которую я не могу никак решить, поэтому я решил попросить помощи в специалиста, который эту проблему решил в своем проекте (Space Engine). Проблема моя заключается в построении модели движения объекта вокруг барицентра по сильно вытянутой эллиптической орбите. Пишу я игру на Android просто, как говорится, для фана. Игра простая 2D, поэтому координаты (х,у). С круговой орбитой все просто, координаты точки на таком коле считаю по формуле:
Код x = r*sin(α) y = r*cos(α) где α - средняя или истинная аномалия. для круговой орбиты эти параметры идентичны r - радиус круга или большая полуось объекта
для элиптической орбиты все сложнее. формулу немного переработал и вышло:
Код r = a * (1 - e2) / (1 + e*cos(α)) //e2 - е квадрат x = r*sin(α) y = r*cos(α) где е - эксцентриситет a - большая полуось α - истинная аномалия
Такая формула заработала, нарисовала мне эллипс с фокусом в точке (0, 0).

И тут у меня тупик. Проблема вот в чем: когда как с круговой орбитой меняю истинную аномалию объекта на одинаковое значение у меня выходит, что в перицентре объект движется медленнее, а в апоцентре быстрее. И я понимаю в чем проблема, просто нельзя использовать истинную аномалию в этих случаях. Надо использовать среднюю аномалию. Но я никак не смог связать два параметра аналитическим уравнением, чтобы при данной средней аномалии найти истинную.
Нашел вот что: Уравнение Кеплера:
где E - эксцентрическая аномалия M - средняя аномалия
Также, на англ. вики нашел ф-лу:
Код cos(E) = (e + cos(U))/(1 + e*cos(U)) sin(E) = (sqrt(1 - e2) * sin(U))/(1 + e*cos(U)) где U - истинная аномалия sqrt(х) - квадратный корень из х.
Из этих двух формул видно что можно из средней аномалии найти истинную, но я никак не могу этого добиться... Помоги-те SpaceEngineer. Может я совсем неправильно все делаю, или как. Как вы считаете декартовые координаты планеты в SE? Заранее благодарен
AMD Phenom II X2 555 3200 MHz; RAM 4GB 1333 Hz; ATI Radeon HD 5670 1024 Mb; ОС Win 7 tabulorasa edition 32 bit
Сообщение отредактировал GV_FiQst - Пятница, 27.11.2015, 00:35 |
|
| |
SpaceEngineer | Дата: Пятница, 27.11.2015, 01:03 | Сообщение # 2 |
Автор Space Engine
Группа: Администраторы
Российская Федерация
Сообщений: 5547
Награды: 55
Статус: Offline
| Цитата GV_FiQst (  ) Из этих двух формул видно что можно из средней аномалии найти истинную, но я никак не могу этого добиться... Просто формулой тут не отделаться. Уравнение Кеплера надо решать численными методами. Например, для малых эксцентриситетов можно воспользоваться простейшим методом Ньютона. Достаточно всего 5 итераций:
Код double E = M; double E0; for (int i=0; i<5; ++i) { E0 = E; E = M + Eccentricity * sin(E0); if (fabs(E-E0) <= 1.0e-6) break; }
Для больших e этот метод сходится медленно, и лучше использовать другой. Вообще в сети полно литературы по этой теме.
|
|
| |
GV_FiQst | Дата: Пятница, 27.11.2015, 01:20 | Сообщение # 3 |
Строитель Миров
Группа: Команда SE
Украина
Сообщений: 1062
Награды: 3
Статус: Offline
| Цитата SpaceEngineer (  ) Код E - эксцентрическая аномалия?
Этот способ работает для е < 0.2? Тогда он не очень мне подходит ведь я хочу сделать астероиды, в которых 0,6 < e < 0.8.
Цитата SpaceEngineer (  ) Вообще в сети полно литературы по этой теме. Искал, гуглил, ломал голову. В сети, да, есть некоторые формулы, но я не нашел того что мне надо
AMD Phenom II X2 555 3200 MHz; RAM 4GB 1333 Hz; ATI Radeon HD 5670 1024 Mb; ОС Win 7 tabulorasa edition 32 bit
|
|
| |
GV_FiQst | Дата: Пятница, 27.11.2015, 01:53 | Сообщение # 4 |
Строитель Миров
Группа: Команда SE
Украина
Сообщений: 1062
Награды: 3
Статус: Offline
| Спасибо вам! Я ввел этот способ для нахождения эксцентрической аномалии и по формуле
Код u = acos((cos(eccAnomaly) - e) / (1 - e*cos(eccAnomaly)));
нашел истинную аномалию!! Все работает как я хочу!
AMD Phenom II X2 555 3200 MHz; RAM 4GB 1333 Hz; ATI Radeon HD 5670 1024 Mb; ОС Win 7 tabulorasa edition 32 bit
Сообщение отредактировал GV_FiQst - Пятница, 27.11.2015, 01:57 |
|
| |