跳转到内容

Celestia/Celx 脚本/CELX Lua 方法/Celx 坐标系

来自维基教科书,自由的教科书

下标文字= Celx 脚本: 坐标系 =

坐标系

[编辑 | 编辑源代码]

一个“坐标系”对象是定义一个天体轨迹和方位使用的坐标系的原点和坐标轴。原点是星表文件定义的另一个天体。可以使用几种方法来设置坐标轴。

用来描述天体轨迹和方位的参考坐标系并不一定相同。这在某些情况下很有用。例如,一颗卫星的轨道可以给出在以地心为中心的赤道坐标系中,而其姿态则给出在当地垂直-当地水平坐标系中。

在 CELX 脚本中,坐标系方法需要加上获得的“坐标系”对象作为前缀,两者用分号分隔。

以下方法可用于获取“坐标系”对象

本章列出了所有可用的坐标系方法,这些方法可用于“坐标系”对象。

位置 frame:to(位置:univ)

将一个位置从宇宙坐标转换为坐标系坐标。转换后的位置将作为“位置”对象返回。

参数

univ
宇宙坐标中的位置,需要转换为坐标系坐标。必须是“位置”对象。

说明

  1. CELX “位置”对象包含空间中一个点的精确坐标。位置是相对于坐标系而言的,在进一步使用之前可能需要转换为或从宇宙坐标转换为坐标系坐标。
  2. 可以使用 位置 方法处理 CELX “位置”对象。“位置”对象也可以用在其他需要“位置”对象作为参数的方法中。

示例
转到地球中心的两倍距离的位置,地球中心是“黄道”参考坐标系的原点(跟随)。

-- Find, select, center and follow Earth first
obs = celestia:getobserver()
earth = celestia:find("Sol/Earth")
celestia:select(earth)
obs:center(earth,0.0)
wait(0.0)
frame = celestia:newframe("ecliptic", earth)
obs:setframe(frame)
-- Get actual observer position and convert to frame coordinates
obs_pos = obs:getposition()
obs_pos_f = frame:to(obs_pos)
-- Goto location at twice the current distance to the Earth's center
obs_pos_2f = celestia:newposition(2*obs_pos_f.x, 2*obs_pos_f.y, 2*obs_pos_f.z)
obs:gotolocation(obs_pos_2f, 1.0)
wait(1.0)


返回 坐标系 方法索引。


to (旋转)

[编辑 | 编辑源代码]

旋转 frame:to(旋转:univ [, 数值:时间 ])

在指定的时间将旋转从宇宙参考坐标系转换为该参考坐标系。转换后的旋转将作为“旋转”对象返回。

参数

univ
来自宇宙参考坐标系的旋转,需要转换为该参考坐标系。必须是“旋转”对象。
时间
该转换的 TDB (质心动力学时) 儒略日数。
Celestia 版本在低于 1.5.0 版本的版本使用 UTC (协调世界时) 儒略日数来进行该转换。
如果省略时间,则使用当前模拟时间。

说明

  1. CELX “旋转”对象在内部是一个四元数,它是数学描述三维旋转的一种方法(即它可以转换为旋转矩阵)。旋转也可以用来描述物体的方位或观察者的方位(即观察者看向哪里,以及“向上”在哪里)。
  2. 可以使用 旋转 方法处理 CELX “旋转”对象。“旋转”对象也可以用在其他需要“旋转”对象作为参数的方法中。
  3. 旧版本的 Celestia 使用 UTC (协调世界时) 来计算时间和位置。从 1.5.0 版本开始,虽然 Celestia 仍然在屏幕上显示 UTC,但它在内部使用 TDB 时间标度来进行所有其他操作,所以对于 CELX 脚本来说 !!!
  4. TDB 时间标度与更熟悉的 UTC 有些不同。通过使用 TDB,Celestia 能更精确地定位天体。截至 2008 年 1 月 1 日,两者之间的差异约为 65 秒。有关更多信息,请参阅 Celestia/时间标度
  5. 要转换 UTC 和 TDB 时间,可以使用 1.5.0 celestia:utctotdb()1.5.0 celestia:tdbtoutc() 方法。
  6. 要转换普通日历日期和儒略日,可以使用 celestia:tojulianday()celestia:fromjulianday() 方法。


返回 坐标系 方法索引。


位置 frame:from(位置:rfpos [, 数值:时间])

在指定的时间将一个位置从坐标系坐标转换为宇宙坐标。转换后的位置将作为“位置”对象返回。

参数

rfpos
坐标系坐标中的位置,需要转换为宇宙坐标。必须是“位置”对象。
时间
该转换的 TDB (质心动力学时) 儒略日数。
Celestia 版本在低于 1.5.0 版本的版本使用 UTC (协调世界时) 儒略日数来进行该转换。
如果省略时间,则使用当前模拟时间。

说明

  1. CELX “位置”对象包含空间中一个点的精确坐标。位置是相对于坐标系而言的,在进一步使用之前可能需要转换为或从宇宙坐标转换为坐标系坐标。
  2. 可以使用 位置 方法处理 CELX “位置”对象。“位置”对象也可以用在其他需要“位置”对象作为参数的方法中。
  3. 旧版本的 Celestia 使用 UTC (协调世界时) 来计算时间和位置。从 1.5.0 版本开始,虽然 Celestia 仍然在屏幕上显示 UTC,但它在内部使用 TDB 时间标度来进行所有其他操作,所以对于 CELX 脚本来说 !!!
  4. TDB 时间标度与更熟悉的 UTC 有些不同。通过使用 TDB,Celestia 能更精确地定位天体。截至 2008 年 1 月 1 日,两者之间的差异约为 65 秒。有关更多信息,请参阅 Celestia/时间标度
  5. 要转换 UTC 和 TDB 时间,可以使用 1.5.0 celestia:utctotdb()1.5.0 celestia:tdbtoutc() 方法。
  6. 要转换普通日历日期和儒略日,可以使用 celestia:tojulianday()celestia:fromjulianday() 方法。


返回 坐标系 方法索引。


from (旋转)

[编辑 | 编辑源代码]

旋转 frame:from(旋转:rfrot)

将旋转从该参考坐标系转换为宇宙参考坐标系。转换后的旋转将作为“旋转”对象返回。

参数

rfrot
该参考坐标系的旋转,需要转换为宇宙参考坐标系。必须是“旋转”对象。

说明

  1. CELX “旋转”对象在内部是一个四元数,它是数学描述三维旋转的一种方法(即它可以转换为旋转矩阵)。旋转也可以用来描述物体的方位或观察者的方位(即观察者看向哪里,以及“向上”在哪里)。
  2. 可以使用 旋转 方法处理 CELX “旋转”对象。“旋转”对象也可以用在其他需要“旋转”对象作为参数的方法中。


返回 坐标系 方法索引。


getcoordinatesystem

[编辑 | 编辑源代码]

字符串 frame:getcoordinatesystem()

返回一个描述坐标系坐标系的字符串。字符串将是以下之一

  • universe
  • ecliptic
  • equatorial
  • observer
  • lock
  • chase
  • 1.6.0 bodyfixed

说明

  1. 在 Celestia 版本 1.6.0 中,名称 bodyfixed 已取代 planetographic。

示例

obs = celestia:getobserver()
actual_frame = obs:getframe()
actual_coordsys = actual_frame:getcoordinatesystem()
celestia:print("Current Coordinate System: " .. actual_coordsys, 5.0, -1, -1, 2, 4)
wait(5.0)


返回 坐标系 方法索引。


getrefobject

[编辑 | 编辑源代码]

对象 frame:getrefobject()

获取该坐标系的参考对象,即坐标系中心,作为“对象”对象。

说明

  1. 对于宇宙参考坐标系,将返回一个 nil 对象。
  2. CELX “对象”对象指的是像行星或恒星这样的天体,但它也可以是位置或宇宙飞船。
  3. 可以使用 对象 方法处理 CELX “对象”对象。“对象”对象也可以用在其他需要“对象”对象作为参数的方法中。

示例

obs = celestia:getobserver()
actual_frame = obs:getframe()
refobj = actual_frame:getrefobject()
if not refobj then
   celestia:print("Currently NO Reference Object present.", 5.0, -1, -1, 2, 4)
else
   refobj_name = refobj:name()
   celestia:print("Current Reference Object: " .. refobj_name, 5.0, -1, -1, 2, 4)
end
wait(5.0)


返回 坐标系 方法索引。


gettargetobject

[编辑 | 编辑源代码]

object frame:gettargetobject()

获取相位锁定帧的目标对象,以“对象”对象的格式。

说明

  1. 对于非相位锁定帧,将返回一个 nil 对象。
  2. CELX “对象”对象指的是像行星或恒星这样的天体,但它也可以是位置或宇宙飞船。
  3. 可以使用 对象 方法处理 CELX “对象”对象。“对象”对象也可以用在其他需要“对象”对象作为参数的方法中。

示例

obs = celestia:getobserver()
actual_frame = obs:getframe()
tarobj = actual_frame:gettargetobject()
if not tarobj then
   celestia:print("Currently NO Target Object present.", 5.0, -1, -1, 2, 4)
else
   tarobj_name = tarobj:name()
   celestia:print("Current Target Object: " .. tarobj_name, 5.0, -1, -1, 2, 4)
end
wait(5.0)


返回 坐标系 方法索引。


华夏公益教科书