ВНИМАНИЕ! На форуме начался конкурс - астрофотография месяца МАРТ!
0 Пользователей и 1 Гость просматривают эту тему.
VECTOR CSGP4_SDP4::CalculateLatLonAlt(VECTOR vPOS, double time){// Reference: The 1992 Astronomical Almanac, page K12. static VECTOR vLLA; double lat,lon,alt; double theta,r,e2,phi,c; double f = 1/298.26 ;//{Earth flattening (WGS '72)} vLLA.x = vLLA.y = vLLA.z = vLLA.w = 0.0; lat = lon = alt = 0.0; theta = r = e2 = phi = c = 0.0; theta = atan2(vPOS.y,vPOS.x);// theta = AcTan(vPOS.y,vPOS.x); lon = Modulus(theta - ThetaG(time),2.0*PI); r = sqrt(sqr(vPOS.x) + sqr(vPOS.y)); e2 = f*(2.0 - f); lat = AcTan(vPOS.z,r); do { phi = lat; c = 1.0/sqrt(1.0 - e2*sqr(sin(phi))); lat = AcTan( vPOS.z + xkmper*c*e2*sin(phi),r); } while (fabs(lat - phi) > 1E-10);//1E-7); For speeding up calculation 7 digit //is exact enough (123.45 alt = r/cos(lat) - xkmper*c; vLLA.x = lat*180.0/PI; // radians vLLA.y = lon*180.0/PI; // radians vLLA.z = alt; // kilometers vLLA.w = theta*180.0/PI; // radians return vLLA;}double CSGP4_SDP4::ThetaG(double jd){// Reference: The 1992 Astronomical Almanac, page B6. double UT,TU,GMST, dummy; UT = modf(jd + 0.5, &dummy); jd -= UT; TU = (jd - 2451545.0)/36525.0; GMST = 24110.54841 + TU * (8640184.812866 + TU * (0.093104 - TU * 6.2E-6)); GMST = Modulus(GMST + secday*omega_E*UT,secday); return (2.0*PI*GMST/secday);}
Так я и не понял, откуда и что там получается. Пишу (пытаюсь...) на Паскале, данную вами функцию переделал, остальное взял с примера, закаченного с этого сайта (там на Паскале расчет дан), запускаю, но результаты не соответствуют (в частности Орбитроновским). Может вы для ясности распишете последовательность вызова функций и передаваемые параметры...
Пределал все под Делфи. Все работает, нормально... Но ПСТ получить не удалось :-(.Последовательность действий по вызову функций следующая:1. Определяю Две Линии Элементов;2. Конвертирую их при помощи Convert_Satellite_Data;3. В зависимости от значения ideep вычисляю SGP4 или SDP4;4. Конвертирую полученные данные при помощи Convert_Sat_State;5. Получаю ПСТ при помощи CalculateLatLonAlt, присланную Вами.Значения после Convert_Sat_State соответствуют примеру и другим программам расчета SGP4 и SDP4, расчет делаю для одного значения tsince=0, как я понимаю, его должно быть достаточно. Значения ПСТ, полученные таким образом, не соответствую реальности... В чем я ошибаюсь???
Ну, если с плоскостями все нормально, значит получается что у меня неверное определение времени... Ведь все остальное вроде нормально. Кстати, а ошибка в 20 км - это на поверхности Земли? Надо будет потом сравнить получившиеся ПСТ, чтоб определить разницу в градусах... Разъясните, пожалуйста, какое время использовать. Я брал значение функции Now, возвращаемое типом данных double. Чувствую, что ошибался, да?
Функция Now возвращает количество дней, прошедших с 1900-го года и равно 39805,9135139699 (сегодня в районе 09:55 UTC). Юлианская отличается на два порядка... Подставил ваше значение времени, но результат все равно не сошелся... получилосьXPOS 1,02113946271229YPOS -14,3281751429875ZPOS -6375,06677027515, т.е. широта: 1.021 Юдолгота: 14.328 З Что может не соответствовать?
lon=-0,25007383205