#!/bin/perl
use Inline Python;
$s = new Sun();
print "SUN: $s\n";
$m = new Moon();
__END__
__Python__
from ephem import Sun as Sun;
from ephem import Moon as Moon;
上面的代码生成:
^{pr2}$怎么了?我尝试过很多其他物体(例如:
from ephem import Observer as Observer;
然后呢
$o= new Observer();
在我的代码体中),它对我所尝试过的一切都很好,除了月亮。在
编辑(可能是无用信息):
在https://github.com/brandon-rhodes/pyephem/tree/master/libastro-3.7.5:
计算太阳,水星,金星,火星的程序
计算木星、土星等的程序 不工作)在chap95.c中完成,函数chap95()
vsop87()返回一个由6个双精度数组组成的数组 一种球坐标。
chap95()“返回”一个6个双精度数组,看起来 笛卡尔坐标,即矩形而非球面。
plans.c中的planpos()调用上述两个函数之一, 取决于你选择哪个星球。奇怪的是planpos() 将函数结果视为相同的(某种程度上),即使它们 返回完全不同的东西。
在planpos()之后,所有的行星都是一样的。planpos()是 由plans()调用(也在plans.c中),它又由调用 循环c中的obj_planet(),然后由obj_cir()在 环c
obj_planet()和obj_cir()定义行星。因为行星 在planpos()之后处理相同,应该没有区别 他们之间。
正如斯莱文在评论中指出的,这确实是对月球、木星和土星的不同处理方式。 实际上,您遇到了Python2问题,}之间有区别。我不能告诉你详细情况,但这个问题有quitea bit ofmaterial。在
types
和{可以说,PyEphem提供的Python包装器将主体转换为一个适当的类,}成为类型而不是类。为什么
Python::Inline
可以处理这个类。Python-C包装器_libastro
提供了类型,因此将Moon
设置为_libastro.Moon
使{Python::Inline
可以处理类而不是类型,我不知道。在但是,这为解决问题提供了足够的信息:将
ephem.Moon
转换为一个类。 因此,以下方法可能有效:对我来说,结果是:
^{pr2}$当然,你也可以对土星和木星使用同样的技巧。在
(我对import语句进行了一点“Pythonized”:不需要
as
或分号)如果您想验证月球仍然是一个特殊的实体,即使在将其转换为一个类之后,请尝试使用它的特殊属性,例如
libration_lat
:这对其他类型的太阳来说都是失败的。在
(我在PyEphem包的
test_bodies.py
中发现了这些特殊属性,尽管我认为这些属性也有文档记录。如果你想测试土星和木星,你可以在那里找到它们。)相关问题 更多 >
编程相关推荐