将方向(矢量)转换为 R.A。和 Skyfield 的 Dec

Convert a direction (vector) to R.A. and Dec in Skyfield

Skyfield 内,如果我有一个从地球中心开始的向量 (x, y, z),我如何 back-convert 将它指向 "Celestial Sphere" 上的一个点(即赤经和赤纬)?

例如,假设我在绕地球的 telescope 轨道上有几个点,我想计算 normal[= 方向的精确赤经和赤纬22=] 进入轨道 - 无论出于何种原因。

这里可以忽略像差和引力等影响 - 我只是想将 ICRF 中的方向转换为 RA 和 Dec。

在伪代码中:

from skyfield.api import load
import numpy as np

eph = load('de421.bsp')
ts  = load.timescale()
now = ts.now()

vec     = np.array([3141, 2718, 5820], dtype=float)
nvec = vec / np.sqrt((vec**2).sum())  # normalize for the heck of it

earth = eph['earth']
evec  = earth.at(now).vector(vec)   # pseudocode

print "It's pointing toward: ", evec.radec()   # pseudocode

令人高兴的是,将 ICRF 中的方向矢量转换为赤经和赤纬完全独立于地球或其他任何位置的位置 — 这是一个仅涉及某些 x、y、z 坐标如何变化的问题用极坐标表示,也就是说是一道几何学的快题。

使用天空场:

from skyfield.positionlib import ICRF

vec = ICRF([3141, 2718, 5820])
ra, dec, distance = vec.radec()
print(ra)
print(dec)

输出:

02h 43m 28.94s
+54deg 29' 04.7"

这甚至避免了手动导入 NumPy,因为 ICRF class 会自动检测是否已通过 Python 列表并自动将其转换为 NumPy 数组你.