Так как звездное время вы не привели, то посмотрим на atn2(y,x), обозначив его как "ra".
Х=-3279.1828
у=3683.9682
ra = 131.672997268861
х=-3218.6228
у=3338.4919
ra = 133.952705735988
Совсем не прыгает. Звездное время изменется равномерно, поэтому разность ra-S не должна приводить к скачкам.
Sic, запоминайте такую сентенцию: практически любую программируемую функцию можно проверить через самоё себя ИЛИ путем сравнения с независимыми (внешними) данными, и это доступно любому начинающему программисту. И так можно проверить каждую функцию из имеющихся, отметая (или подтверждая
) по пути подозрения в ошибках. И помощь каких-то посторонних теток в этом действии абсолютно не нужна.
Например,
В данном случае мы вычисляем долготу как L =180/PI*atn2(y,x) - S и испытываем сомнения в том, что:
1) правильно ли вычисляется atn2(y,x) или аналогичная функция.
2) правильно ли вычисляется звездное время.
Проверяем сомнение нумер 1: программируем цикл следующего вида (сорри, я буду писать на VB, думаю, что смысл вы поймете)
PI = 3.14159265358979
For i = 0 to 360 ' Изменяем угол от 0 до 360 градусов
Angle = i
x = cos(Angle*PI/180) ' задаем x и y в полярных координатах
y = sin(Angle*PI/180)
Angle2 = 180/PI* atn2(y,x) ' вычисляем угол через x и y
Печатаем Angle и Angle 2
Next iСравниваем (программно или глазками) все значения Angle и Angle2, приведя их к одному диапазону (0-360 градусов или -180-180 градусов). Если каждый угол Angle совпадает с большой точностью с Angle2 для всего диапазона углов, то выискиваем в мозге свободный участок, записываем туда раз и навсегда: "Функция atn2 проверена и она работает правильно", и идем дальше искать возможные ошибки.
Проверяем сомнение нумер 2: правильное ли у нас звездное время? Я вам писала формулу, но впоследствии вы спрашивали:
A s это гринвичское среднее сидерическое время gmst.
, из чего я делаю вывод, что звездное время вы взяли откуда-то извне. Как проверить правильность? Опять таки или запрограммировав самостоятельно, или путем сравнения с внешними источниками.
Например,
1) взять программу StarCalc, задать в ней положение наблюдателя на гринвическом меридиане (Долгота точки наблюдения = 0) и посмотреть в меню: Операции - Общая информация - Местное звездное время.
Местное звездное время для нулевой долготы - это и есть гринвическое звездное время.
2) пойти в Google и задать в поиске что-нибудь вроде "Астрономические калькуляторы", пошариться по ссылкам, найти что-то похожее на
http://hea.iki.rssi.ru/AZT22/RUS/cgi-bin/c_time.htm, задать долготу равной 0 (Гринвическое время!) и сравнить свою цифирь с выдаваемой.
Обычно хватает сравнения с тремя источниками, чтобы понять, правильно ли вычисляемшь ты сам. Остается, конечно, вероятность, что 3 человека ошиблись, а ты - нет, но эта вероятность близка к нулю.
Мой вам совет: пофантазируйте на темы:
1) где у меня лично может быть ошибка? В каких функциях я не уверен?
2) с чем сравнить, чтобы избавиться от своих подозрений в ошибках?
P.S. Никто из нас не рождается безупречным, все мы совершаем ошибки, просто каждый сам находит подходящий для себя способ
контролировать себя, даже в таких мелочах, как вычисление подспутниковой точки. Если вы планируете и дальше баловаться с Дельфями, то необходимо начинать приучаться к самостоятельному error-контролю
.
P.P.S. Я не против того, чтобы перепроверять каждую вашу циферку (мне даже интересно, в чем окажется засада), но мне кажется, что если вы поднапряжетесь, то осилите это непонятки самостоятельно, а это, поверьте, кайффф...