我试图得到笛卡尔位置和速度向量,在我的轨道上每一个传播步骤。我用OrbitalPyhttp://pythonhosted.org/OrbitalPy/来生成经典开普勒元素的轨道。在
根据文档,我应该能够从class orbital.utilities.StateVector
得到状态向量(包括位置和速度),但是我得到了一个类型错误:new()正好有3个参数(给定2个)
代码如下:
from scipy.constants import kilo
import orbital
from orbital import earth, KeplerianElements, Maneuver, plot, utilities
from orbital.utilities import Position, Velocity
import matplotlib.pyplot as plt
import numpy as np
#Orbit Setup
orbitPineapple = KeplerianElements.with_period(96 * 60, body=earth, i=(np.deg2rad(51.6)))
plot(orbitPineapple)
plt.show()
orbitPineapple
Out[23]: KeplerianElements(a=6945033.343911132,
e=0,
i=0.90058989402907408,
raan=0,
arg_pe=0,
M0=0.0,
body=orbital.bodies.earth,
ref_epoch=<Time object: scale='utc' format='jyear_str' value=J2000.000>)
prop1 = orbital.maneuver.PropagateAnomalyTo(M=1.00)
orbitX = orbitPineapple.apply_maneuver(prop1)
plot(orbitPineapple, title='Go Pineapple!')
plt.show()
orbital.utilities.StateVector(orbitPineapple)
TypeError Traceback (most recent call last)
<ipython-input-53-91fb5303082b> in <module>()
4 #print(orbital.utilities.StateVector.velocity(orbitPineapple))
5
----> 6 orbital.utilities.StateVector(orbitPineapple)
7 #orbital.utilities.StateVector.position(orbitPineapple())
8
TypeError: __new__() takes exactly 3 arguments (2 given)
原来问题出在轨道上。当使用原始轨道名称时,只能获得状态向量。在
在这种情况下,
orbitPineapple.r
将返回位置(x,y,z),orbitPineapple.v
将返回(Vx,Vy,Vy)。在位置和速度矢量在每次机动后都会更新,只需使用与原始轨道名称
print(orbitPineapple.r, orbitPineapple.v)
完全相同的线。在另外,一个超级有用的功能可以节省我几个小时,那就是你只需输入一个变量或函数和
name.
,然后点击制表键即可显示所有选项。在我不使用这个软件包,但是这个错误很容易诊断。从the docs可以看出,
orbital.utilities.StateVector
有两个参数;一个用于“位置”,另一个用于“速度”。当您执行orbital.utilities.StateVector(orbitPineapple)
时,您只提供一个参数(orbitPineapple
),其值将被视为表示“位置”。你也需要提供速度。在至于错误
...takes exactly 3 arguments (2 given)
,python高估了类方法所需/传递的参数数量,因为它在计算参数时考虑了self
参数。例如:给出:
^{pr2}$所以你可以把错误解读为“接受2个参数,但你只给出了1个”
相关问题 更多 >
编程相关推荐