2012-09-05 38 views
2

执行此代码段:差异渡越时间为Sun

import ephem 
oma=ephem.Observer() 
oma.lat='50.7975189' 
oma.lon='4.3579155' 
oma.elevation=114.43 
oma.epoch=ephem.now() 
sun=ephem.Sun(oma) 
print "object transit time: ",sun.transit_time 
print "observer next transit time: ", oma.next_transit(sun) 

这给出以下输出:

object transit time: 2012/9/5 11:41:03 
observer next transit time: 2012/9/5 11:41:06 

因此,有太阳的时间之间3秒之间的差对象是为太阳观察者计算的时间。哪两个是最可靠的?如果我们将这些值与本地计算值进行比较,那么观察者下一个通行时间是最接近的。

如果我们这样做了火星同样的计算:

import ephem 
oma=ephem.Observer() 
oma.lat='50.7975189' 
oma.lon='4.3579155' 
oma.elevation=114.43 
oma.epoch=ephem.now() 
mars=ephem.Mars(oma) 
print "object transit time: ",mars.transit_time 
print "observer next transit time: ", oma.next_transit(mars) 

这给出了以下的输出:

object transit time: 2012/9/5 15:05:32 
observer next transit time: 2012/9/5 15:05:32 

所以没有什么区别。

最好的问候,

大理石

回答

0

这是由于事实transit_time不无二观察员。

我改善和改变你的代码:

from ephem import Observer, Sun, now 
oma=Observer() 
oma.lat='50.7975189' 
oma.lon='40.3579155' 
oma.elevation=114.43 
oma.epoch=now() 
sun=Sun(oma) 
print "object transit time: ",sun.transit_time 
print "observer next transit time: ", oma.next_transit(sun) 

,这给:

object transit time: 2012/9/6 09:16:48 
observer next transit time: 2012/9/7 09:16:27 

现在,为什么会出现1天差异(或-11秒)从4改变LON到40? 哪些单位是在ephem中表示的lon和lat?我想这不是这个问题的一部分。

1

要确定哪些功能是最准确的,只是喂两次,他们给你到观察者的compute()功能,看看哪些土地最接近过境的真正时刻的方位正好是180°:

import ephem 
oma = ephem.Observer() 
oma.lat, oma.lon = '50.7975189', '4.3579155' 
oma.elevation = 114.43 
sun = ephem.Sun() 
for t in ('2012/9/5 11:41:03', 
      '2012/9/5 11:41:06'): 
    oma.date = t 
    sun.compute(oma) 
    print 'azimuth at', t, 'was', sun.az 

从这个脚本的输出显示,从较新的next_transit()功能11:41:06时间给出了更准确的结果:

azimuth at 2012/9/5 11:41:03 was 179:58:45.4 
azimuth at 2012/9/5 11:41:06 was 179:59:49.5 

老精度较低属性是为什么当前PyEphem文档建议始终使用next_transit()进行所有运输计算。 (这反正就是一切,但地球卫星,为此.transit_time切换到不同的算法。)

事实上,目前的文件甚至没有提及要求非地球卫星的.next_transit甚至有可能和该属性仅用于古代的向后兼容性。

这两个函数都以相同的方式工作:猜测时间,检查当时的方位角,然后反复提炼他们的猜测,直到他们喜欢答案。最近的next_transit()函数可以做得更好,所以你应该使用它。

两个功能给你相同的答案火星的原因是巧合 - 如果你将运行对火星的功能用于其它日期比9月5日,你会看到不同的答案出来。这一切都取决于这些功能使他们的一系列猜测的顺序,最后猜测是否发生土地并拢或相距甚远。而且,我会打赌,他们的答案都没有真的连比赛为9月5日 - 他们只是匹配精确到秒,这是所有得到显示!如果你是通过打印每个答案的repr(float(…))以显示这两个答案全精度朱利安日期,那么你无疑会发现分歧一路下跌超出了一秒的分辨率能够显示您小数点之下。

不覆盖所有的顾虑?