2401_83550317 2024-03-22 18:20 采纳率: 20%
浏览 6
已结题

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

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

img

  • 写回答

2条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-03-22 18:20
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题:读取卫星星历,之后画出来的一天中卫星的轨迹是这样的是什么原因? 回答:
    1. 卫星的轨道类型:这个轨道是椭圆形的,也就是说卫星轨道类型是椭圆形轨道。
    2. 卫星的运动方式:卫星在轨道上是做圆周运动,也就是说,卫星在轨道上的运动方式是圆周运动。
    3. 地球的自转:地球自转一次是23小时56分4秒,而1天是24小时,所以地球每天都会旋转大约4分钟。因此,我们看到的卫星轨迹会在地球的自转影响下略微偏移,造成轨迹看起来像是“Z”字形。 示例代码:以下是一个读取卫星星历,并画出卫星轨迹的Python代码示例。
    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()
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月23日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 路由器考试怎么办,有懂行的吗 ,eNSP
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来
  • ¥15 java 判断某个数 区间是否存在
  • ¥15 appium控制多个雷电模拟器问题
  • ¥15 C# iMobileDevice
  • ¥15 谁会做这个啊#ensp#Boson NetSim
  • ¥15 如何编写针对TPS6503320FRGE型号的电源管理芯片的编程代码?
  • ¥15 设计简单目录管理系统,要满足以下内容
  • ¥15 关于九十度混合耦合器信号分析问题