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


A A A A Автор Тема: Как преобразовать координаты?  (Прочитано 1164 раз)

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

Оффлайн ORSAАвтор темы

  • *****
  • Сообщений: 7 938
  • Благодарностей: 246
  • Человек без бинокля недальновиден
    • Сообщения от ORSA
Как преобразовать экваториальные координаты в азимутальные - поделитесь алгоритмом, а лучше программной библиотекой если есть. Янашел ряд формул в инете но они плохо работают - у тангенса период  PI и нужно корректировать результат вычисления функции ATAN().

Пишу сейчас для себя программку для автоматизации подготовки плана наблюдения:
при отборе из каталога будет учитываться:
- время наблюдения
- геометрия участка (углы на которые закрывается небо строениями и деревьями)
- яркость объектов ::)
БПЦ 10x40; Nikon 7x50; MT3S; Vixen Porta ll; SQM L; Foton 7x35; SW BKP 2501; HDAZ; HEQ5 pro; APO; Alter 703 delux; БГШ 2.3x40; BA8 UO 15x70

Оффлайн Ivan Mhitarov

  • Модератор
  • *****
  • Сообщений: 6 264
  • Благодарностей: 108
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Ivan Mhitarov
Re: Как преобразовать координаты?
« Ответ #1 : 04 Ноя 2008 [01:15:51] »
На чем пишем?
Именно такая программка уже есть - AstroPlanner.
Если интересуют формулы - вот кусок из моей программы
{Эта функция из Монтенбрука}
Function LMST(MJD,Lambda:Extended):Extended;
Var MJD0,T,UT,GMST:Extended;

 Function Frac(X:Extended):Extended;
   Begin  X:=X-Trunc(X); If X<0 Then X:=X+1; Frac:=X; End;

Begin
  MJD0:=Int(MJD);
  UT:=(MJD-MJD0)*24.0;
  T:=(MJD0-51544.5)/36525.0;
  GMST:=6.697374558+1.0027379093*UT
        +(8640184.812866+(0.093104-6.2E-6*T)*T)*T/3600.0;
  LMST:=24.0*Frac((GMST-Lambda/15.0)/24.0);
End;

Function Atn2(Y,X:Extended):Extended;
  Var AX,AY,FI:Extended;
Begin
 If ( X = 0.0 ) AND ( Y = 0.0 )
   Then Atn2:=0.0
   Else
     Begin
       AX:=Abs(X);
       AY:=Abs(Y);
       If ( AX > AY )
         Then FI:=ArcTan(AY/AX)/Rad
         Else FI:=90.0-ArcTan(AX/AY)/Rad;
       If X < 0.0 Then FI:=180.0-FI;
       If Y < 0.0 Then FI:=-FI;
       Atn2:=FI;
     End;
End;



    // Кусок моей программы
    // Sn, Cs - Синус и Косинус от угла в градусах
    // ceLat.Value - широта, ceLong.Value - долгота
    S:=LMST(LocalDateTimeToDateTime(ATime)+15018, -ceLong.Value);
    T:=15*(S-Ra);
    El:=90-Acs(Cs(ceLat.Value)*Cs(Dec)*Cs(T)+Sn(ceLat.Value)*Sn(Dec));
    Az:=Atn2(Cs(Dec)*Sn(T), Cs(Dec)*Sn(ceLat.Value)*Cs(T)-Cs(ceLat.Value)*Sn(Dec));

    Az:=Az+180;   // Отсчитывается от точки юга
    If Az >= 360 Then
      Az:=Az-360;
Иван Мхитаров
Кубанский Астрономический Клуб "45".

Оффлайн recarrion

  • Модератор
  • *****
  • Сообщений: 2 396
  • Благодарностей: 30
  • SW 80ED, HEQ5Pro, ZWO 2600MC, DS 80X400, ZWO 178MC
    • Skype - recarrion
    • Сообщения от recarrion
Re: Как преобразовать координаты?
« Ответ #2 : 04 Ноя 2008 [13:52:36] »
Паскаль! До сих пор приятно на листинги смотреть.
Астрономия-наука совершенно необходимая, и изучать её надо с детства.

«Мы являемся свидетелями процессов определенного рода потому, что другие процессы протекают без свидетелей». [Зельманов, 1970].

Если вы кинете кирпич в ЧД, то ему плевать на эддингтоновский предел. (с)Борис Штерн

Оффлайн ORSAАвтор темы

  • *****
  • Сообщений: 7 938
  • Благодарностей: 246
  • Человек без бинокля недальновиден
    • Сообщения от ORSA
Re: Как преобразовать координаты?
« Ответ #3 : 04 Ноя 2008 [19:56:48] »
О коллеги - спасибо за листинг.  :)
Пишу на самом доступном инструменте всех времен и народов ЁКСЕЛЕ-МОКСЕЛЕ :-)
БПЦ 10x40; Nikon 7x50; MT3S; Vixen Porta ll; SQM L; Foton 7x35; SW BKP 2501; HDAZ; HEQ5 pro; APO; Alter 703 delux; БГШ 2.3x40; BA8 UO 15x70

Оффлайн ORSAАвтор темы

  • *****
  • Сообщений: 7 938
  • Благодарностей: 246
  • Человек без бинокля недальновиден
    • Сообщения от ORSA
Re: Как преобразовать координаты?
« Ответ #4 : 04 Ноя 2008 [21:57:07] »
Фу преобразовал в VBA - работает









Цитата

Const rad = (2 * 3.14159265358979 / 360)

Function Get_Az(S As Double, Shirota As Double, RA As Double, dec As Double) As Double
Rem Shirota  широта в градусах
Rem S звездное время в часах
Rem RA в в часах
Rem dec = склонение в градусах
Dim t As Double
   t = 15 * (S - RA)
   Az = Atn2(Cos(to_rad(dec)) * Sin(to_rad(t)), Cos(to_rad(dec)) * Sin(to_rad(Shirota)) * Cos(to_rad(t)) -    Cos(to_rad(Shirota)) * Sin(to_rad(dec)))
   Az = Az + 180
   If Az >= 360 Then Az = Az - 360
   Get_Az = Az
End Function

Function Get_Alt(S As Double, Shirota As Double, RA As Double, dec As Double) As Double
Rem Shirota  широта в градусах
Rem S звездное время в часах
Rem RA в в часах
Rem dec = склонение в градусах
Dim t As Double
   t = 15 * (S - RA)
   Get_Alt = 90 - to_deg(acos(Cos(to_rad(Shirota)) * Cos(to_rad(dec)) * Cos(to_rad(t)) + Sin(to_rad(Shirota)) *    Sin(to_rad(dec))))
End Function

Function frac(x As Double) As Double
   x = x - Round(x)
   If x < 0 Then x = x + 1
   frac = x
End Function

Function LMST(MJD As Double, Lambda As Double) As Double
Dim MJD0 As Double, t As Double, UT As Double, GMST As Double

  MJD0 = Int(MJD)
  UT = (MJD - MJD0) * 24#
  t = (MJD0 - 51544.5) / 36525#
  GMST = 6.697374558 + 1.0027379093 * UT + (8640184.812866 + (0.093104 - 0.0000062 * t) * t) * t / 3600#
  LMST = 24# * frac((GMST - Lambda / 15#) / 24#)
 
 
End Function


Function Atn2(Y, x As Double) As Double
Dim AX As Double, AY As Double, FI As Double
If (x = 0#) And (Y = 0#) Then
 Atn2 = 0#
Else
       
    AX = Abs(x)
    AY = Abs(Y)
    If (AX > AY) Then
        FI = Atn(AY / AX) / rad
    Else
        FI = 90# - Atn(AX / AY) / rad
    End If
       
    If x < 0# Then FI = 180# - FI
    If Y < 0# Then FI = -FI
    Atn2 = FI
     
End If

End Function

Function to_rad(x As Double) As Double
   to_rad = x * rad
End Function

Function to_deg(x As Double) As Double
   to_deg = x / rad
End Function

Function acos(x As Double) As Double
   Sheets("s_acos").Cells(5, 1).Value = x
   acos = Sheets("s_acos").Cells(5, 2).Value
End Function

БПЦ 10x40; Nikon 7x50; MT3S; Vixen Porta ll; SQM L; Foton 7x35; SW BKP 2501; HDAZ; HEQ5 pro; APO; Alter 703 delux; БГШ 2.3x40; BA8 UO 15x70

Оффлайн ORSAАвтор темы

  • *****
  • Сообщений: 7 938
  • Благодарностей: 246
  • Человек без бинокля недальновиден
    • Сообщения от ORSA
Re: Как преобразовать координаты?
« Ответ #5 : 09 Ноя 2008 [19:27:23] »
Ну вот наконец то все и получилось! Чем приятен EXCEL, что теперь программку можно легко доводить и модифицировать под любые желания J
БПЦ 10x40; Nikon 7x50; MT3S; Vixen Porta ll; SQM L; Foton 7x35; SW BKP 2501; HDAZ; HEQ5 pro; APO; Alter 703 delux; БГШ 2.3x40; BA8 UO 15x70