Расчеты / единица измерения небесного объекта - Астрономия / Swift iOS - PullRequest
0 голосов
/ 04 сентября 2018

Я разрабатываю приложение с открытым исходным кодом для контроллера телескопа. Я начал этот проект с очень небольшим знанием астрономии. По сути, приложение отправит данные на телескоп по беспроводному соединению.


Данные небесного объекта следующие:

["SAO#": 308,
"HD": 8890,
"Con": "Alpha Ursae Minoris",
"StarName": "Polaris",
"RAH": 2,
"RAM": 31.812,
"DED": 89,
"DEM": 15.85,
"Mag": 2.02,
"PRA": 0.038,
"PDec": -0.015]

RAH = часы RA, RAM = минуты RA, * ​​1007 * DED = декабрь градусов, DEM = декабрь минут

(PRA и PDec - это дрейф звезды в угловых секундах в год (из каталога Epoch J2000.0). Мне не нужно использовать их в приложении, как мне сказали.)

Сервер контроллера (получатель данных) принимает в этом формате:
Установите целевое значение RA- HH: MM: SS,
Установите целевое значение Dec-DD: MM: SS,
Установите целевой Azm-DDD: MM: SS,
Установить цель Alt-DD: MM: SS


Я хотел бы преобразовать данные данного небесного объекта в Ra, Dec, Azm, Alt.

Мне сказали, что:

RA = ((RAH + (RAM / 60.0)) * 15.0); //in degrees, RA is an earthly longitude projected onto the sky
DEC = (DED + (DEM / 60.0)); //in degrees, Dec is an earthly latitude projected onto the sky

Для звезды или другого небесного объекта из каталогов, имеющих фиксированную эпоху (J2000). Мне нужно применить поправку для прецессии / нутации (колебание оси вращения Земли), чтобы получить наполовину приличную оценку звезды. RA / Dec "сейчас".

Я использую библиотеку кодов , которая, кажется, поддерживает это и выполняет вычисления самостоятельно.
Хотелось бы узнать процедуру преобразования данных из экваториальных координат в горизонтальные в том числе. Например, вот как работает код:

    let jd = Date().julianDay
    let RAH = 2.0
    let RAM = 31.812
    let DED = 89.0
    let DEM = 15.85

    let eqCoor = EquatorialCoordinates.init(rightAscension: Hour((RAH+(RAM/60.0))*15.0), declination: (Degree(DED+(DEM/60.0))), epoch: Epoch.J2000, equinox: Equinox.standardJ2000)
    let annualAbb = eqCoor.correctedForAnnualAberration(julianDay: jd, highPrecision: true)
    let initEQ = AstronomicalObject.init(name: "Polaris", coordinates: annualAbb, julianDay: jd, highPrecision: true)
    print("EquatorialCoordinates -> RA(α):", initEQ.equatorialCoordinates.alpha, "DEC(δ):", initEQ.equatorialCoordinates.delta) 

    let userLocation = GeographicCoordinates(positivelyWestwardLongitude: Degree(.plus, 75, 51, 13.65), latitude: Degree(.plus, 30, 54, 43.55), altitude: 256)
    print("User Location -> Latitude:", userLocation.latitude, "Longitude:", userLocation.longitude)

    let preccCoor = annualAbb.precessedCoordinates(to: Equinox.standardJ2000)
    let horizontalCoor = preccCoor.makeHorizontalCoordinates(for: userLocation, at: jd)
    print("Horizontal Coordinates -> Azimuth:", horizontalCoor.azimuth.inHours, "Altitude:", horizontalCoor.altitude.inRadians.inDegrees)

Вот данные, которые возвращает код:

EquatorialCoordinates -> RA(α): +37h56m06.009s DEC(δ): +89°16'05.165"
User Location -> Latitude: +30°54'43.550" Longitude: +75°51'13.650"
Horizontal Coordinates -> Azimuth: +12h1m07.396s Altitude: +30°13'16.650"

Вот данные Stellarium в соответствии с тем же местоположением, что и мой код.

enter image description here

Данные, рассчитанные по моему коду, даже близко не соответствуют данным из Stellarium, за исключением кажущейся высоты.

...