def calculate_state_information(data, miu=3.986e14):
"""
根据六根数推算出航天器相应的状态信息
Args:
data: 椭圆和双曲线转移轨道的六根数: a;e;i;omega;Omega;f
%a: 半长轴;e:离心率;i:轨道倾角;
%omega: 近地点幅角;Omega: 升交点经度;f: 真近点角。
抛物线转移轨道的根数: p;i;omega;Omega;f
%p:半矩形矩;i:轨道倾角;omega:近地点幅角;
%Omega: 升交点经度;f: 真近点角。
圆转移轨道的根数: a;i;u;Omega
%a:半径;i:轨道倾角;u:纬度参数;
%Omega: 升交点经度。
miu: 3.986E5 # km3/s2
3.986E14 # m3/s2
Returns:
R0: 位置
V0: 速度
"""
if len(data) == 6: # 椭圆和双曲线
a = data[0]
e = data[1]
i = data[2]
omega = data[3]
Omega = data[4]
f = data[5]
p = abs(a * (1 - e ** 2))
u = omega + f
elif len(data) == 5: # 抛物线
p = data[0]
i = data[1]
omega = data[2]
Omega = data[3]
f = data[4]
u = omega + f
else: # 圆形
p = data[0]
e = 0
i = data[1]
omega = 0
u = data[2]
Omega = data[3]
f = 0
Coordinate = p / (1 + e * np.cos(f)) * np.array([
np.cos(Omega) * np.cos(u) - np.sin(Omega) * np.sin(u) * np.cos(i),
np.sin(Omega) * np.cos(u) + np.cos(Omega) * np.sin(u) * np.cos(i),
np.sin(i) * np.sin(u)
])
V = (miu / p) ** 0.5 * np.array([
-np.cos(Omega) * (np.sin(u) + e * np.sin(omega)) - np.sin(Omega) * (np.cos(u) + e * np.cos(omega)) * np.cos(i),
-np.sin(Omega) * (np.sin(u) + e * np.sin(omega)) + np.cos(Omega) * (np.cos(u) + e * np.cos(omega)) * np.cos(i),
np.sin(i) * (np.cos(u) + e * np.cos(omega))
])
return Coordinate, V
输入一个列表形式的六根数,将会返回航天器的位置以及速度,注意返回的航天器状态是在地心惯性系下的表示。
我的输入信息为:
data = [1534141.1843523756, 0.9965408363248673, 2.158830500815679, 3.5658638413234094, 1.0233558786998698, 3.1295206069169907]
print(calculate_state_information(data))