13.11.2014, 15:52
#1
Собеседник
Регистрация: 13.11.2014
Сообщения: 3
Как с помощью ШЭ рассчитать сколько градусов прошла планета между двумя датами?
Доброго всем дня!
Мне необходимо определить значение пройденных планетой градусов между указанными датами. Использую для этих целей библиотеку швейцарских эфемерид. У меня получается найти значение положения планеты на определенные даты, но я не знаю как получить в итоге дельту градусов.
Пример:
Даны две даты ( 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-градусные циклы. Как это исправить?
13.11.2014, 16:11
#2
Сообщник
Регистрация: 03.02.2014
Сообщения: 2,230
Разделите период времени на более мелкие отрезки времени, получите соответствующие им дельты и сложите их.
13.11.2014, 18:35
#3
Собеседник
Регистрация: 13.11.2014
Сообщения: 3
Цитата:
Сообщение от AlMaximus
Разделите период времени на более мелкие отрезки времени, получите соответствующие им дельты и сложите их.
Благодарю за ответ, значит только делить на отрезки. Понятно
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
Собеседник
Регистрация: 13.11.2014
Сообщения: 3
Цитата:
Сообщение от Арташир
Или же для упрощения расчетов Вы можете поступить следующим образом:
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
Логику поняла, да, это даже лучше чем делить на отрезки времени. Спасибо за подсказку
Опции темы
Опции просмотра
Линейный вид
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +1, время: 08:46 .