跳转至

Osculating Orbital Elements

地理学名词
  • Ecliptic: 黄道
  • Equatorial: 赤道
  • Inclination: 倾角
  • a: 半长轴
  • e: 离心率
  • Periapsis Time: 近日点时间
  • Period: 轨道周期

Generating Elements

轨道元素的生成

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from skyfield.api import load 
# 加载天体数据
from skyfield.elementslib import osculating_elements_of 
# 计算轨道元素

ts = load.timescale()
t = ts.utc(2018, 4, 22)

# 加载了一个包含行星和卫星数据的文件 (de421.bsp)
# 并提取出地球和月球的对象
planets = load('de421.bsp')
earth = planets['earth']
moon = planets['moon']

# 计算月球相对于地球的位置
position = (moon - earth).at(t)
# 利用之前计算的位置来生成一个包含轨道元素的对象
elements = osculating_elements_of(position)

# 从 elements 对象中提取出三个重要的轨道元素
i = elements.inclination.degrees # 倾角 i
e = elements.eccentricity # 离心率 e
a = elements.semi_major_axis.km # 半长轴 a

print('Inclination: {0:.2f} degrees'.format(i))
print('Eccentricity: {0:.5f}'.format(e))
print('Semimajor axis: {0:.0f} km'.format(a))

# 近日点时间
print('Periapsis:', elements.periapsis_time.utc_strftime())
# 轨道周期
print('Period: {0:.2f} days'.format(elements.period_in_days))

# 计算下一个近日点时间: (当前近日点时间 + 轨道周期)
next = elements.periapsis_time + elements.period_in_days
print('Next periapsis:', next.utc_strftime())

alt text

Attributes of OsculatingElements objects

轨道形状

  • eccentricity (离心率) → numpy.ndarray
    • 表示轨道的离心程度,值在 0 到 1 之间。离心率为 0 表示圆形轨道,接近 1 表示高度椭圆轨道
  • inclination (倾角) → Angle 对象
    • 表示轨道平面相对于参考平面的倾斜角度,通常以度数表示
  • longitude_of_ascending_node (升交点经度) → Angle 对象
    • 表示轨道平面与参考平面相交的点(升交点)的经度

近日点相关

  • argument_of_periapsis (近日点参数) → Angle 对象
    • 描述从升交点到近日点的角度
  • longitude_of_periapsis (近日点经度) → Angle 对象
    • 表示近日点在轨道上的位置,以经度表示
  • periapsis_time (近日点时间) → Time 对象
    • 表示天体达到近日点的具体时间

轨道大小

  • apoapsis_distance (远地点距离) → Distance 对象
    • 表示天体在其轨道上最远离中心天体的位置的距离
  • mean_motion_per_day (每日平均运动) → Angle 对象
    • 表示天体每天在其轨道上移动的平均角度
  • periapsis_distance (近日点距离) → Distance 对象
    • 表示天体在其轨道上最接近中心天体的位置的距离
  • period_in_days (周期,以天为单位) → numpy.ndarray
    • 表示完成一次完整轨道所需的时间,以天为单位
  • semi_latus_rectum (半短轴) → Distance 对象
    • 描述椭圆轨道的一种几何特征,通常与半长轴和离心率相关
  • semi_major_axis (半长轴) → Distance 对象
    • 椭圆轨道中最长的半径,决定了轨道的大小
  • semi_minor_axis (半短轴) → Distance 对象
    • 椭圆轨道中最短的半径,通常与半长轴和离心率相关

卫星在轨道中的位置

  • argument_of_latitude (纬度参数) → Angle 对象
    • 用于描述卫星相对于其轨道的位置
  • eccentric_anomaly (离心异常) → Angle 对象
    • 描述卫星在椭圆轨道上的位置,与离心率有关
  • mean_anomaly (平均异常) → Angle 对象
    • 用于描述卫星在其周期内的平均位置
  • mean_longitude (平均经度) → Angle 对象
    • 描述卫星在其周期内的位置,以经度表示
  • true_anomaly (真实异常) → Angle 对象
    • 描述卫星在实际位置上的角度,与中心天体有关
  • true_longitude (真实经度) → Angle 对象
    • 描述卫星在实际位置上的经度

注意:卫星在近日点时,所有异常值(如平均异常、真实异常等)均为零,因此这些位置可以隐含在近日点时间中

其他属性

time (时间) → Time 对象

初始化方法

在初始化一个 Orbit 对象的时候:

需要在上述每一类属性中挑一个作为参数,缺一不可!

Warning

回想一下,为什么我们之前在定义 Satellite / Orbit 对象时,都要加入 ts

比如: 传送门

相信读到这里,你已经明白原因了 👍

Reference Planes

  • 默认情况 > elements() > J2000.0 赤道平面
  • DIY > elements = osculating_elements_of(position, ecliptic) > j2000.0 黄道平面

示例:

Python
1
2
3
4
5
6
from skyfield.data.spice import inertial_frames
ecliptic = inertial_frames['ECLIPJ2000'] # 选择合适的黄道对象

t = ts.utc(2018, 4, 22, range(0,25))
position = (moon - earth).at(t)
elements = osculating_elements_of(position, ecliptic) # 以黄道平面为参考