我写了这个程序:
#!/usr/bin/perl
use Astro::Nova qw(get_solar_equ_coords get_lunar_equ_coords get_hrz_from_equ
get_solar_rst_horizon get_timet_from_julian
get_julian_from_timet get_lunar_rst get_lunar_phase);
$observer = Astro::Nova::LnLatPosn->new("lng"=>0,"lat"=>89.5);
for $i (2456623..2456624) {
print "DAY: $i\n";
($status,$rst) = get_lunar_rst($i, $observer);
print "STATUS: $status\n";
$rst->get_transit();
$rise = $rst->get_rise();
print "RISE: $rise\n";
$set = $rst->get_set();
print "SET: $set\n\n";
}
得到了这些结果:
DAY: 2456623
STATUS: 1
RISE: 5.5664193588601e-309
SET: 1.55254159695923e-267
DAY: 2456624
STATUS: -1
RISE: 1.9634470382202e-153
SET: 2.26294632209635e+137
换句话说,月亮从极地(总是向上)到下面 没有实际上升或设置的地平线。
我意识到89.5度是一种极端情况,但为什么呢 这个代码不应该工作吗?
正如http://aa.usno.navy.mil/data/docs/RS_OneYear.php所示 是这个区间的月落(JD 2456623 = 2013-11-26 12:00:00):
另一个奇怪的地方:如果我注释掉“$ rst-> get_transit();”我, 得到这些结果:
DAY: 2456623
STATUS: 1
RISE: 5.5664193588601e-309
SET: 1.14372958360957e-268
DAY: 2456624
STATUS: -1
RISE: 6.80740365931403e+199
SET: 4.81766816905579e+151
上升/设置仍然是奇怪的(这是好的,因为状态是-1),但是 它们是不同的。我总是假设get_lunar_rst()返回一个固定的 结构,但显然不是?检查运输的行为 时间改变结构?
编辑:好的,我运行程序两次而根本没有更改它并获得:
DAY: 2456623
STATUS: 1
RISE: 5.5664193588601e-309
SET: 2.99352717623831e-264
DAY: 2456624
STATUS: -1
RISE: 1.9634470382202e-153
SET: 2.26294632209635e+137
DAY: 2456623
STATUS: 1
RISE: 5.5664193588601e-309
SET: 3.04770606791278e-262
DAY: 2456624
STATUS: -1
RISE: 1.9634470382202e-153
SET: 2.26294632209635e+137
换句话说,2456623设置无缘无故变化。
答案 0 :(得分:1)
我已经联系了libnova的作者,他们已经证实这是一个错误并正在努力纠正它。
如果它们在正北方时位于地平线之上,则libnova错误地认为物体是极地的。这是不真实的:https://astronomy.stackexchange.com/q/963我写了一个不假设这个的修正,但如果一个身体的赤纬是非单峰的,可能仍然是不准确的:https://astronomy.stackexchange.com/questions/962/is-lunar-elevation-at-a-given-location-for-a-given-day-unimodal