【问题标题】:pyEphem - Calculating Positions of non-Earthy MoonspyEphem - 计算非地球卫星的位置
【发布时间】:2013-04-23 15:01:46
【问题描述】:

我正在尝试获取不绕地球运行的卫星的地球距离和赤经(相对于我在地球上的观察点),但 pyEphem 没有返回与其他太阳体相同的属性。

以木卫三(木星最大的卫星)为例:

import math, ephem

Observer = ephem.city('London')
Observer.date = '2013-04-23'
Observer.pressure, Observer.elevation = 0, 100

moonGanymede = ephem.Ganymede(Observer)

print math.cos(moonGanymede.ra) # right ascension
print moonGanymede.earth_distance * ephem.meters_per_au # distance

我收到此错误:

AttributeError: 'Ganymede' object has no attribute 'earth_distance'

ra 属性存在,但它是相对于我的Observer 还是相对于 Jupiter?

似乎是相对于Observer,因为如果我改变位置,值也会改变。

我已阅读the documentation 并且我知道这些属性不是为卫星定义的,但我不知道如何计算与地球相关的这些属性,因为月球体的其他定义属性:

在行星卫星上,也设置:

月球相对于行星的位置(以行星半径测量)

x — offset +east or –west
y — offset +south or –north
z — offset +front or –behind

在做:

print moonGanymede.x, moonGanymede.y, moonGanymede.z

输出:

-14.8928060532 1.52614057064 -0.37974858284

由于木星的平均半径为 69173 公里,这些值转换为:

moonGanymede.x = 1030200 kilometers (west)
moonGanymede.y = 105570 kilometers (south)
moonGanymede.z = 26268 kilometers (behind)

鉴于我知道木星相对于Observer 的距离和赤经,我如何计算moonGanymede 的距离和赤经(也相对于Observer?

我正在使用 pyEphem 3.7.5.1(使用 Python 2.7)。

【问题讨论】:

标签: python math geometry astronomy pyephem


【解决方案1】:

只是一些想法;您可能需要执行两个步骤。

  1. 获取卫星相对于母行星的位置
  2. 获取行星相对于观察者的位置
  3. 三角函数计算;获取卫星相对于观察者的位置。

您已经完成了 1,并且可以轻松完成 2。将所有值转换为 x、y、z,然后再添加回 angular。或者我确定您/ephym 可以直接为您执行此操作。

HTH

【讨论】:

  • 谢谢,这就是我的目标。就像我说的,我已经做了#2,但我只有木星的赤经和赤纬。我的问题正是#3,我不确定如何围绕它进行数学运算(即使我确实想出了一些东西,我也不确定结果是否正确)。 AFAIK,pyEphem 似乎也没有提供任何在笛卡尔坐标系和赤道坐标系之间进行转换的方法(请参阅rhodesmill.org/pyephem/coordinates)。
【解决方案2】:

我仍在试图弄清楚(如果有人发现了什么,请告诉我),但如果我这样做了,似乎

sqrt((-14.8928060532)^2 + (1.52614057064)^2 + (-0.37974858284)^2) = 14.9756130481

我将始终得到一个始终在距轨道中心的最小/最大距离 (14.95 - 14.99) 范围内的值。

因为这是在轨道中心半径中指定的,所以我需要将它乘以 69173 * 1000 以获得 SI 单位:

14.9756130481 * 69173 * 1000 = 1.0359080813762213 * 10^9 meters

由于 pyEphem 与 A​​U 处理距离:

print (1.0359080813762213 * 10**9) / ephem.meters_per_au # 0.00692461785302

同时,地球与木星的距离为5.79160547256AU。

现在,要获得距离,我应该根据z 坐标的符号加减:

5.79160547256 - 0.00692461785302 = 5.78468085470698 AU

今天(现在)运行相同的代码返回 6.03799937821,这似乎非常接近 WolframAlpha 目前返回的 6.031 的值,它不匹配 100% 但也许可以由一些不同的底层星历库或数据源来解释。不确定...

【讨论】:

    【解决方案3】:

    看起来赤经、赤纬、方位角等计算正确:

    In [31]: g = ephem.Ganymede(Observer)
    
    In [32]: j = ephem.Jupiter(Observer)
    
    In [33]: g.ra, g.az, g.dec
    Out[33]: (1.3024204969406128, 5.586287021636963, 0.38997682929039)
    
    In [34]: j.ra, j.az, j.dec
    Out[34]: (1.303646765055829, 5.5853118896484375, 0.39010250333236757)
    

    Ganimede 和 Jupiter 的值足够接近,看起来除了到物体的距离之外,您可以得到正确的结果。

    【讨论】:

    • 确实,但我也确实需要距离。我昨天开始阅读它,也许我今天可以想出一个解决方案。
    • 是的,看起来范围只是为人造物体计算的......我想这需要改进,实施并提交补丁:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多