Телескопы покупают здесь


A A A A Автор Тема: пересчет  (Прочитано 2055 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Tau

  • Гость
Re: пересчет
« Ответ #40 : 21 Мар 2010 [14:55:30] »
Так как звездное время вы не привели, то посмотрим на 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. Я не против того, чтобы перепроверять каждую вашу циферку (мне даже интересно, в чем окажется засада), но мне кажется, что если вы поднапряжетесь, то осилите это непонятки самостоятельно, а это, поверьте, кайффф...
« Последнее редактирование: 21 Мар 2010 [15:11:30] от Tau »