Python 在Skyfield中将方向(矢量)转换为R.a.和Dec

Python 在Skyfield中将方向(矢量)转换为R.a.和Dec,python,skyfield,Python,Skyfield,在内部,如果我有一个来自地球中心的向量(x,y,z),我如何将它转换成“天球”上的一个点(即赤经和赤纬) 例如,假设我在望远镜绕地球运行的轨道上有几个点,我想计算出轨道法线方向的精确RA和Dec,不管出于什么原因 像像差和引力这样的效应在这里可以忽略-我只是想把ICRF中的一个方向转换成RA和Dec 在伪代码中: from skyfield.api import load import numpy as np eph = load('de421.bsp') ts = load.timesca

在内部,如果我有一个来自地球中心的向量(x,y,z),我如何将它转换成“天球”上的一个点(即赤经和赤纬)

例如,假设我在望远镜绕地球运行的轨道上有几个点,我想计算出轨道法线方向的精确RA和Dec,不管出于什么原因

像像差和引力这样的效应在这里可以忽略-我只是想把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坐标表示为极坐标的问题,也就是说,这是一个快速的几何问题

使用Skyfield:

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
类会自动检测它是否已被传递给Python列表,并自动将其转换为NumPy数组。

难以置信!好的,这正是我需要的!我想只有在需要计算引力偏转或像差时,时间才有帮助——这根本不是我需要的。谢谢哦,我明白了-都在这里:这看起来很有趣!确认一下,这是J2000坐标,对吗?我相信ICRF与J2000有关。是的。ICRF是J2000的高精度替代品,它最终有一个致命的缺陷:我们不知道,非常高的精度,2000年初地球的确切位置——至少对射电天文学家来说不够高精度——因此我们永远无法将这一想法作为高精度测量的基础。