2017-09-21 18 views
0

私の軌道上の各伝搬ステップのデカルト座標と速度ベクトルを取得しようとしています。私はOrbitalPy http://pythonhosted.org/OrbitalPy/を使って、古典的なケプラーの要素で軌道を生成しています。私はclass orbital.utilities.StateVectorから状態ベクトル(位置と速度の両方)を得ることができる必要がありますが、私はタイプエラー取得のドキュメントによるとPython OrbitalPyトレースバックエラーデカルト状態ベクトルケプラー要素からの位置と速度

新しい()は正確に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) 

答えて

0

それは問題がOrbitalPyであることが判明した「2つの引数を取りますが、あなただけの1を与えた」として

TypeError: do_something() takes exactly 2 arguments (3 given) 

だから、あなたがエラーを読み取ることができます。元の軌道名を使用するときにのみ状態ベクトルを得ることができます。

この場合、orbitPineapple.rは位置(x、y、z)を返し、orbitPineapple.vは(Vx、Vy、Vy)を返します。

各マヌーバが適用された後の位置ベクトルと速度ベクトルは、元の軌道名print(orbitPineapple.r, orbitPineapple.v)とまったく同じ行を使用するだけで更新されます。さらに

、私の時間を保存していたスーパー便利な機能が、あなただけの変数や関数とname.を入力し、キーとすべてのオプションが表示されタブを打つことができます。

+0

位置ベクトルは、座標を他のシステムに変換しようとする人のために、AstroPyのGCRSであるGeocentric Equatorial Inertial(GEI)参照フレーム内にあります。 'gcrs。transform_to() 'はAstroPyで素晴らしい – Rose

2

私はこのパッケージを使用しませんが、エラーは診断するのに十分簡単です。 the docsから、orbital.utilities.StateVectorは2つの引数を取ることがわかります。 1つは「位置」、もう1つは「速度」です。 orbital.utilities.StateVector(orbitPineapple)を実行すると、その値が「位置」を表すものとみなされる引数(orbitPineapple)が1つだけ提供されます。あなたも速度を供給する必要があります。

エラー...takes exactly 3 arguments (2 given)については、selfパラメータをカウントアップするときに考慮する必要があるため、pythonはクラスメソッドに必要な/渡された引数の数を過大評価します。たとえば:

class Testing(object): 


    def __init__(self): 
     self.a = 2 

    def do_something(self, b): 
     self.a += b 

obj = Testing() 
obj.do_something(2, 3) # Clearly passing only 2 arguments 

は与える:

+0

私は、orbital.utilities.StateVectorが私にそれらを入力するのではなく、デカルト座標の位置ベクトルと速度ベクトルを与えるという印象を受けました。状態ベクトルから軌道を作るために 'classmethod from_state_vector(r、v、body、ref_epoch = ) 'が使われたと思った。 – Rose

+0

'orbital.utilities.StateVector'を使って伝播した軌道の状態ベクトルを取得する方法はありますか? 'orbitPineapple.orbital.utilities.StateVector'のようなものか、それらの行に沿ったものか? – Rose

+0

@rose私はこのライブラリについて何も知りません。私の答えはエラーメッセージだけを説明しています。あなたの最初のコメントのために、間違いなくあなたの前提が文書とあなたが得たエラーに基づいて間違っているようです。しかし、私は問題の文脈を知り、何にもっとライブラリを使うべきかを理解するためにそれに投資する必要があるでしょう(それは勉強に時間がかかるかもしれないニッチなライブラリのようです)。 – roganjosh

関連する問題