Python 更好的方法来计算天空中两个物体的明显角度分离?

Python 更好的方法来计算天空中两个物体的明显角度分离?,python,skyfield,Python,Skyfield,更新:Skyfield刚刚进行了重大修订,包括扩展文档和角度分离方法-请参阅公认的答案 我在计算两个物体之间的明显的角度间隔。我没有在包中找到一种方法,所以我“发明”了一种方法,通过计算两个明显位置向量之间的点积 这是目前最好的方法吗?在Skyfield的范围内,这基本上是正确的吗 def separation(seconds, lat, lon): lat, lon, seconds = float(lat), float(lon), float(seconds) # necessa

更新: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现在支持返回两个位置之间的角度间隔的方法:


这里有一个问题。我不知道Skyfield(但它看起来很有趣),但我觉得你的代码还行。或者,在两个明显位置的RA和偏角上使用球面三角的cos规则。由于舍入误差,这两种方法之间的差别很小。还可以看到天空岩石@谢谢你的建议。我在这里坚持笛卡尔,因为这就是我在应用程序中使用的。我觉得使用笛卡尔坐标和避免分母中的反极和零更安全(除非有一天月球真的撞上了地球),尽管我不知道这是否合理。