4

我只是想确保我了解 PyEphem 对角度所做的事情。

假设我有一个观察者在 30° S、60° W 今天中午看着天空。所以我这样做:

obs = ephem.Observer()
obs.lat, obs.lon = '-30', '-60'
obs.date = '2012/6/22 12:00:00'

现在我想找出观察者在观察某个方位角和高度时看到的天球的哪一部分(在 RA 和赤纬中)。我可以:

obs.radec_of(az,alt)

这是我感到困惑的地方。据我了解,PyEphem 以弧度的形式使用所有角度,所以我应该把azalt作为弧度。那么,0°高度是地平线,90°高度是直接在头顶,-90°是直接指向地面吗?在这种情况下,PyEphem 是否认为 95° 高度与 85° 相同,还是会翻转到 -85°?

另外,如果观察者想看南极,这是正确的代码吗?

az = float( ephem.degree('180') )
alt = float( ephem.degree('30') )
ra, dec = obs.radec_of(az,alt)

或者高度应该是-30°?

4

2 回答 2

4

您对高度和方位角的理解听起来是正确的!对于南纬30°的人来说,南天极确实位于南部地平线上方30°,正如您所描述的那样。

但是我们可以对您的代码进行一两个修复。

首先,拼写错误。您正在寻找的将度数转换为弧度的函数被命名ephem.degrees()(注意复数) - 如果您尝试ephem.degree作为函数调用,那么您将得到异常:

TypeError: 'float' object is not callable

因为ephem.degree实际上是浮点数 0.0174532925199 因为那是一个度数的弧度。而且您不能像调用函数一样调用浮点数!解决这个问题,我们会为您的示例获得正确且有效的代码:

az = float(ephem.degrees('180'))
alt = float(ephem.degrees('30'))
ra, dec = obs.radec_of(az,alt)
print ra, dec

→ 12:30:10.05 -89:53:54.7

但是我们可以让代码更简单!

首先, 的返回值ephem.degrees()已经是一个浮点数,所以float()围绕它的调用实际上是没有必要的;你可以说:

az = ephem.degrees('180')
alt = ephem.degrees('30')

并且这两个值作为radec_of(). 事实上,你可以做得更好:因为radec_of()函数知道方位角和高度传统上以度为单位,你可以将字符串交给函数本身,它会假设你的字符串中的数字是以度为单位的。因此,如果我们愿意,我们可以完全消除azandalt变量,然后说:

ra, dec = obs.radec_of('180', '30')

最后,您可能想知道为什么我们返回的 RA 和赤纬并不完全在南极,即使它们很接近。

第一个原因是 PyEphem 考虑了大气折射,它提高了低空物体在地平线以上的视高度。如果我们告诉Observer物体忽略大气影响(通过告诉它我们居住的地方没有空气——大气压力为零),那么返回值将更接近南极:

obs.pressure = 0
ra, dec = obs.radec_of('180', '30')
print ra, dec

→ 12:24:25.48 -89:55:15.9

显然,这让我们更接近。剩下一两个涉及进动甚至章动的问题,我们需要解决这些问题才能真正将偏角降低到完整的 –90°,但是当我可以更好地可视化角度时,我将不得不在早上查看它们!

于 2012-06-23T03:48:53.433 回答
4

回答你的另一个问题:像 95° 这样的高度既不能简单地认为与 85° 相同, PyEphem也不认为它在 -85° 高度的最低点附近低于我们的脚。相反,它认为 95° 的意思是“一直沿着你所遵循的方位线向上走——向上、向上、向上,直到最终到达天顶并处于 90°——然后继续向上5 度进入天空的另一边,将你带到完全相反的方位线下 5 度。”</p>

因此,如果您询问方位角和高度(15°、95°)处的点,那么 PyEphem 会认为这是一直向上 15° 线,然后更进一步,以便您开始回到195 ° 方位角天顶线的另一侧。所以你所说的方位角和高度的“标准化”名称是(195°,90° - 5°)=(195°,85°)。

于 2012-06-23T04:32:44.350 回答