org.orekit.bodies
包提供了一个接口,用于表示星体、行星或小行星等空间物体的位置和几何形状。
天体的位置由CelestialBody
接口表示。该接口提供了将天体视为对航天器的引力或光照影响的外部天体(通常在扰动力计算中使用),或将其视为具有自己坐标系的内部天体所需的方法。
CelestialBodyFactory
类是一个工厂,提供了几个预定义的实现CelestialBody
接口的实例,用于主要的太阳系天体。支持太阳、月亮、八大行星和冥王星矮行星。除了这些真实的天体外,还支持两个点,以方便地将它们视为真实的天体:太阳系质心和地月质心。默认情况下,CelestialBodyFactory
从与JPL DE格式(如DE 405、DE 406、DE 423等)兼容的二进制星历文件中检索位置和速度。此外,还支持与之类似的IMCCE Inpop星历格式。可以通过定义用户特定的JPL星历加载器来覆盖此默认处理。
例如,计算太阳和月亮在EME2000坐标系中的位置,可以按如下方式进行:
CelestialBody sun = CelestialBodyFactory.getSun();
CelestialBody moon = CelestialBodyFactory.getMoon();
Vector3D sunInEME2000 =
sun.getPosition(date, FramesFactory.getEME2000());
Vector3D moonInEME2000 =
moon.getPosition(date, FramesFactory.getEME2000());
由于支持的天体实现了CelestialBody
接口,它们都提供了自己的以天体为中心的惯性定向坐标系和以天体为中心的本体定向坐标系,因此在提供的坐标系中添加了更多的坐标系。本体定向坐标系使用国际天文学联合会(IAU)的极点和本初子午线定义。由于坐标系树以以地球为中心的坐标系为根,太阳系天体的坐标系树似乎不是规范形式。当然,这只是将GCRF作为根坐标系的任意选择的副作用,并且对计算没有任何影响。太阳系天体的坐标系树如下所示:
天体的形状由BodyShape
接口表示。
Orekit目前只提供了两种实现:
OneAxisEllipsoid
类,表示大型旋转天体(如行星或太阳)的自然扁平形状Geoid
类,在椭球体上添加了重力场的效应,以表示海平面对于小行星,预计用户将提供自己的形状模型,例如基于三角剖分。他们应该实现BodyShape
接口以便被Orekit使用。
当使用OneAxisEllipsoid
天体表示时,点通常以关联的天体坐标系描述,即所谓的大地坐标(经度、纬度、高度)。GeodeticPoint
类允许处理此类坐标。它是一个简单的容器,除了基本的规范地面方向(天顶/天底、东/西、北/南)的计算外,不提供处理方法。