读取卫星星历,之后画出来的一天中卫星的轨迹是这样的是什么原因

关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题:读取卫星星历,之后画出来的一天中卫星的轨迹是这样的是什么原因? 回答:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 读取星历文件
data = pd.read_csv('ephemeris.csv', header=None)
# 将读取到的数据转换为numpy数组
data = np.array(data)
# 提取经度、纬度和高度信息
lon = data[:, 0]
lat = data[:, 1]
alt = data[:, 2]
# 计算轨道半长轴、偏心率、近地点角度、升交点赤经、升交点赤纬和平近点角
a = 6378137.0 + alt
e = data[:, 9]
w = data[:, 10]
Om = data[:, 11]
i = data[:, 12]
M = data[:, 13]
# 计算卫星的真近点角Eccentric Anomaly
E = M
for j in range(10):
E = M + e*np.sin(E)
# 计算卫星相对于近地点的真近点角真近点角True Anomaly
TA = 2*np.arctan(np.sqrt(1+e)/(1-e)*np.tan(E/2))
# 计算卫星相对于近地点的离心近点角Mean Anomaly
MA = TA - w
# 计算卫星的地心坐标
N = 6378137.0/np.sqrt(1-0.00669437999013*np.sin(lat)*np.sin(lat))
x = (N+alt)*np.cos(lat)*np.cos(lon)
y = (N+alt)*np.cos(lat)*np.sin(lon)
z = (N*(1-0.00669437999013)+alt)*np.sin(lat)
# 计算卫星在地心坐标系下的位置
xp = (np.cos(Om)*np.cos(w+MA)-np.sin(Om)*np.sin(w+MA)*np.cos(i))*x + (-np.sin(Om)*np.cos(w+MA)-np.cos(Om)*np.sin(w+MA)*np.cos(i))*y + np.sin(w+MA)*np.sin(i)*z
yp = (np.cos(Om)*np.sin(w+MA)+np.sin(Om)*np.cos(w+MA)*np.cos(i))*x + (-np.sin(Om)*np.sin(w+MA)+np.cos(Om)*np.cos(w+MA)*np.cos(i))*y - np.cos(w+MA)*np.sin(i)*z
zp = (np.sin(Om)*np.sin(i))*x + (np.cos(Om)*np.sin(i))*y + np.cos(i)*z
# 将卫星在地心坐标系下的位置转换为经纬度坐标系下的位置
L = np.rad2deg(np.arctan2(yp, xp))
B = np.rad2deg(np.arctan2(zp, np.sqrt(xp*xp + yp*yp)))
# 将角度限制在[-180, 180]范围内
L[L > 180] -= 360
L[L < -180] += 360
# 画出轨迹图
plt.plot(L, B)
plt.xlabel('Longitude (degrees)')
plt.ylabel('Latitude (degrees)')
plt.title('Satellite Trajectory')
plt.show()