你看过libnova了吗?它非常强大.有一个Perl包装器:Astro :: Nova.
引用下面的文档,其中一个可以完全符合您的要求.Perl文档相对稀疏,因为我不想重现包装器的整个库文档.这些功能大致类似于C中的工作方式.应该记录其中的例外情况.该主libnova文档有所有细节.
(int $status, Astro::Nova::RstTime $rst) =
get_object_rst(double JD, Astro::Nova::LnLatPosn observer, Astro::Nova::EquPosn object)
(int $status, Astro::Nova::RstTime $rst) =
get_object_rst_horizon(double JD, Astro::Nova::LnLatPosn observer,
Astro::Nova::EquPosn object, double horizon)
(int $status, Astro::Nova::RstTime $rst) =
get_object_next_rst(double JD, Astro::Nova::LnLatPosn observer, Astro::Nova::EquPosn object)
(int $status, Astro::Nova::RstTime $rst) =
get_object_next_rst_horizon(double JD, Astro::Nova::LnLatPosn observer,
Astro::Nova::EquPosn object, double horizon)
Run Code Online (Sandbox Code Playgroud)