在Skyfield中计算两个物体表观角距离的更好方法是什么?

5
更新: Skyfield 刚刚进行了重大修订,包括扩展文档和角度分离方法,请参见所接受的答案。
我正在使用Skyfield计算两个物体之间的视角分离。在该软件包中没有找到相应的方法,因此我通过计算两个视位置向量之间的点积“发明”了一种方法。
当前这种方法是最好的方法吗?在 Skyfield 的范围内基本正确吗?
def separation(seconds, lat, lon):

    lat, lon, seconds = float(lat), float(lon), float(seconds) # necessary it seems

    place = earth.topos(lat, lon)

    jd = JulianDate(utc=(2016, 3, 9, 0, 0, seconds))

    mpos = place.at(jd).observe(moon).apparent().position.km
    spos = place.at(jd).observe(sun).apparent().position.km

    mlen = np.sqrt((mpos**2).sum())
    slen = np.sqrt((spos**2).sum())

    sepa = ((3600.*180./np.pi) *
            np.arccos(np.dot(mpos, spos)/(mlen*slen)))

    return sepa


from skyfield.api import load, now, JulianDate
import numpy as np
from scipy.optimize import minimize

data = load('de421.bsp')

sun   = data['sun']
earth = data['earth']
moon  = data['moon']

sep = separation(12000, 32.5, 215.1)

print "sun-moon aparent separation: ", sep, " arcsec"

这是一个相关的Skyfield问题 - uhoh
1
我不了解Skyfield(但它看起来很有趣),但是你的代码在我看来没问题。或者,可以对两个视位置的赤经和赤纬使用球面三角形余弦定理。由于舍入误差,两种方法之间会有微小的差异。另请参阅https://en.wikipedia.org/wiki/Great-circle_distance。 - PM 2Ring
Skyfield非常棒!@PM2Ring感谢您的建议。我仍然坚持使用笛卡尔坐标系,因为这是我在应用程序中使用的。我感觉使用笛卡尔坐标系更安全,可以避免在分母中出现反极点和零(除非月球有一天真的撞到地球),尽管我不知道这是否合理。 - uhoh
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接