我只想确保我理解PyEphem对angles做了什么。
假设我有一个观测者在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适用于所有角度的弧度,所以我应该将az和alt作为弧度。那么,是不是这样,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°?
发布于 2012-06-23 11:48:53
你对高度和方位的理解听起来是正确的!对于位于南纬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()函数知道方位角和高度传统上是以度为单位给出的,您只需将字符串交给函数本身,它就会假定字符串中的数字是以度为单位编写的。因此,如果我们愿意,我们可以完全删除az和alt变量,只需这样说:
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-23 12:32:44
回答你的另一个问题:像95°这样的高度既不能简单地认为与85°相同,PyEphem也不认为它在-85°高度的底部低于我们的脚下。相反,它认为95°的意思是“沿着你正在追随的方位线一直走下去,直到你最终到达天顶并处于90°-然后继续向天空的另一边移动5度,将你带到完全相反的方位线下5度。”
因此,如果你询问方位和高度( 15°,95°)的点,那么PyEphem会认为它一直沿着15°线向上,然后走得更远,所以你开始沿着天顶另一侧的195°方位线返回。因此,您正在讨论的方位和高度的“标准化”名称是(195°,90°- 5°) = (195°,85°)。
https://stackoverflow.com/questions/11161028
复制相似问题