2017-09-21 7 views
0

나는 내 궤도에서 각 전파 단계에 대한 데카르트 위치 및 속도 벡터를 얻으려고합니다. OrbitalPy http://pythonhosted.org/OrbitalPy/을 사용하여 고전적인 Keplerian 요소로 궤도를 생성합니다.Python OrbitalPy Traceback 오류 데카르트 상태 벡터 Keplerian 요소의 위치 및 속도

내가 class orbital.utilities.StateVector에서 상태 벡터 (위치와 속도 모두)를 얻을 수 있어야 문서에 따르면

하지만이 유형의 오류 얻을 : (새로운)은 정확히 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 개 인자를하지만 당신은 단지 하나를 주었다"로

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은 두 개의 인수를 취하는 것을 볼 수 있습니다. 하나는 "위치"이고 다른 하나는 "속도"입니다. orbital.utilities.StateVector(orbitPineapple)을 할 때 "position"을 나타내는 것으로 간주되는 하나의 인수 (orbitPineapple) 만 제공합니다. 당신도 속도를 제공해야합니다.

오류 ...takes exactly 3 arguments (2 given)의 경우 파이썬은 숫자를 계산할 때 self 매개 변수를 고려하기 때문에 클래스 메서드에 대해 필수/전달 인수의 수를 과대 평가합니다. 예를 들어 :

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 =

+0

'orbital.utilities.StateVector'를 사용하여 전파 된 궤도에 대한 상태 벡터를 얻을 수있는 방법이 있습니까? 'orbitPineapple.orbital.utilities.StateVector' 또는 그 라인을 따라 무엇인가? – Rose

+0

@rose 나는이 라이브러리에 대해 아무 것도 모른다. 내 대답은 오류 메시지에 대해서만 설명합니다. 귀하의 첫 번째 의견을 들어, 그것은 분명히 당신의 가정은 문서 및 오류를 기반으로 잘못된 것으로 보인다. 그러나 나는 문제의 맥락을 알아야하고, 도서관이 더 많은 것을 위해 어떻게 사용되어야하는지 이해하려고 노력해야한다. (배울 시간이 걸리는 틈새 도서관처럼 보인다.) – roganjosh