Вернуться   Астрологические форумы ARGO > Делимся информацией. Тестируем астрологию. Прогнозируем. > Астрологические программы

Ответ
 
Опции темы Опции просмотра
Старый 13.11.2014, 15:52   #1
Apple
Собеседник
 
Регистрация: 13.11.2014
Сообщения: 3
Apple отключил(а) отображение уровня репутации
По умолчанию Как с помощью ШЭ рассчитать сколько градусов прошла планета между двумя датами?

Доброго всем дня!
Мне необходимо определить значение пройденных планетой градусов между указанными датами. Использую для этих целей библиотеку швейцарских эфемерид. У меня получается найти значение положения планеты на определенные даты, но я не знаю как получить в итоге дельту градусов.

Пример:
Даны две даты (05.04.1998 и 27.03.2000), Необходимо определить, сколько градусов прошел Марс за это время.

Вот мой код
Код:
int main() { char serr[AS_MAXCH]; int iflag = SEFLG_HELCTR | SEFLG_SPEED; double x_start_julday[6]; double x_end_julday[6]; char splanet[40]; int planet = SE_MARS; int gregFlag = SE_GREG_CAL; double hour = swe_hour(0, 0, 0); // Определяем юлианские даты для 05.04.1998 и 27.03.2000 double start_julday = swe_julday(1998, 4, 5, hour, gregFlag); double end_julday = swe_julday(2000, 3, 27, hour, gregFlag); // Определяем положение планеты на 2 даты swe_calc_ut(start_julday, planet, iflag, x_start_julday, serr); swe_calc_ut(end_julday, planet, iflag, x_end_julday, serr); // Рассчитываем разницу между положениями планеты double delta = swe_difdeg2n(x_end_julday[0], x_start_julday[0]); swe_get_planet_name(planet, splanet); std::cout << std::string(splanet) << ", start = " << x_start_julday[0] << " , stop = " << x_end_julday[0] << " , delta = " << delta << std::endl; return 0; }


После запуска, в консоли будет следующее:
Mars, start = 30.2132 , stop = 50.3413 , delta = 20.1281

На самом деле Марс за это время прошел 380.1281, то есть не учитываются полные 360-градусные циклы. Как это исправить?
Apple вне форума   Ответить с цитированием
Старый 13.11.2014, 16:11   #2
AlMaximus
Сообщник
 
Аватар для AlMaximus
 
Регистрация: 03.02.2014
Сообщения: 2,230
AlMaximus репутация выше +2000AlMaximus репутация выше +2000AlMaximus репутация выше +2000AlMaximus репутация выше +2000AlMaximus репутация выше +2000AlMaximus репутация выше +2000AlMaximus репутация выше +2000AlMaximus репутация выше +2000AlMaximus репутация выше +2000AlMaximus репутация выше +2000AlMaximus репутация выше +2000
По умолчанию

Разделите период времени на более мелкие отрезки времени, получите соответствующие им дельты и сложите их.
AlMaximus вне форума   Ответить с цитированием
Старый 13.11.2014, 18:35   #3
Apple
Собеседник
 
Регистрация: 13.11.2014
Сообщения: 3
Apple отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от AlMaximus
Разделите период времени на более мелкие отрезки времени, получите соответствующие им дельты и сложите их.
Благодарю за ответ, значит только делить на отрезки. Понятно
Apple вне форума   Ответить с цитированием
Старый 14.11.2014, 11:43   #4
Арташир
Собеседник
 
Регистрация: 02.02.2014
Сообщения: 133
Арташир отключил(а) отображение уровня репутации
По умолчанию

Или же для упрощения расчетов Вы можете поступить следующим образом:

1) возьмите сидерический цикл обращения планеты, например, Марса cir_mars.

2) Рассчитайте djd = jd_end - jd_start.

3) Рассчитайте число полных обращений Марса за период djd
N_cir_mars = int (djd / cir_mars)

4) Найдите число градусов, которые прошел Марс в течение этих обращений:

S_Mars = N_cir_mars * 360

5) Прибавьте к этому числу Вашу дельту, полученную из функции swe_difdeg2n

delta = delta + S_Mars

И Вы получите полное число градусов, которые прошел Марс от jd_start до jd_end

Последний раз редактировалось Арташир, 14.11.2014 в 11:56.
Арташир вне форума   Ответить с цитированием
Старый 14.11.2014, 16:36   #5
Apple
Собеседник
 
Регистрация: 13.11.2014
Сообщения: 3
Apple отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от Арташир
Или же для упрощения расчетов Вы можете поступить следующим образом:

1) возьмите сидерический цикл обращения планеты, например, Марса cir_mars.

2) Рассчитайте djd = jd_end - jd_start.

3) Рассчитайте число полных обращений Марса за период djd
N_cir_mars = int (djd / cir_mars)

4) Найдите число градусов, которые прошел Марс в течение этих обращений:

S_Mars = N_cir_mars * 360

5) Прибавьте к этому числу Вашу дельту, полученную из функции swe_difdeg2n

delta = delta + S_Mars

И Вы получите полное число градусов, которые прошел Марс от jd_start до jd_end
Логику поняла, да, это даже лучше чем делить на отрезки времени. Спасибо за подсказку
Apple вне форума   Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +1, время: 08:46.


Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 1995-2024, ARGO