Celestia/Celx 脚本/CELX Lua 方法/Celx 坐标系
下标文字= Celx 脚本: 坐标系 =
一个“坐标系”对象是定义一个天体轨迹和方位使用的坐标系的原点和坐标轴。原点是星表文件定义的另一个天体。可以使用几种方法来设置坐标轴。
用来描述天体轨迹和方位的参考坐标系并不一定相同。这在某些情况下很有用。例如,一颗卫星的轨道可以给出在以地心为中心的赤道坐标系中,而其姿态则给出在当地垂直-当地水平坐标系中。
在 CELX 脚本中,坐标系方法需要加上获得的“坐标系”对象作为前缀,两者用分号分隔。
以下方法可用于获取“坐标系”对象
- 使用 celestia:newframe() 方法。
- 使用 observer:getframe() 方法。
- 使用 1.6.0 object:bodyfixedframe() 方法。
- 使用 1.6.0 object:equatorialframe() 方法。
- 使用 1.6.0 object:orbitframe() 方法。
- 使用 1.6.0 object:bodyframe() 方法。
- 使用 1.6.0 phase:orbitframe() 方法。
- 使用 1.6.0 phase:bodyframe() 方法。
本章列出了所有可用的坐标系方法,这些方法可用于“坐标系”对象。
位置 frame:to(位置:univ)
将一个位置从宇宙坐标转换为坐标系坐标。转换后的位置将作为“位置”对象返回。
参数
- univ
- 宇宙坐标中的位置,需要转换为坐标系坐标。必须是“位置”对象。
说明
- CELX “位置”对象包含空间中一个点的精确坐标。位置是相对于坐标系而言的,在进一步使用之前可能需要转换为或从宇宙坐标转换为坐标系坐标。
- 可以使用 位置 方法处理 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)
旋转 frame:to(旋转:univ [, 数值:时间 ])
在指定的时间将旋转从宇宙参考坐标系转换为该参考坐标系。转换后的旋转将作为“旋转”对象返回。
参数
- univ
- 来自宇宙参考坐标系的旋转,需要转换为该参考坐标系。必须是“旋转”对象。
- 时间
- 该转换的 TDB (质心动力学时) 儒略日数。
Celestia 版本在低于 1.5.0 版本的版本使用 UTC (协调世界时) 儒略日数来进行该转换。
如果省略时间,则使用当前模拟时间。
说明
- CELX “旋转”对象在内部是一个四元数,它是数学描述三维旋转的一种方法(即它可以转换为旋转矩阵)。旋转也可以用来描述物体的方位或观察者的方位(即观察者看向哪里,以及“向上”在哪里)。
- 可以使用 旋转 方法处理 CELX “旋转”对象。“旋转”对象也可以用在其他需要“旋转”对象作为参数的方法中。
- 旧版本的 Celestia 使用 UTC (协调世界时) 来计算时间和位置。从 1.5.0 版本开始,虽然 Celestia 仍然在屏幕上显示 UTC,但它在内部使用 TDB 时间标度来进行所有其他操作,所以对于 CELX 脚本来说 !!!
- TDB 时间标度与更熟悉的 UTC 有些不同。通过使用 TDB,Celestia 能更精确地定位天体。截至 2008 年 1 月 1 日,两者之间的差异约为 65 秒。有关更多信息,请参阅 Celestia/时间标度。
- 要转换 UTC 和 TDB 时间,可以使用 1.5.0 celestia:utctotdb() 和 1.5.0 celestia:tdbtoutc() 方法。
- 要转换普通日历日期和儒略日,可以使用 celestia:tojulianday() 和 celestia:fromjulianday() 方法。
位置 frame:from(位置:rfpos [, 数值:时间])
在指定的时间将一个位置从坐标系坐标转换为宇宙坐标。转换后的位置将作为“位置”对象返回。
参数
- rfpos
- 坐标系坐标中的位置,需要转换为宇宙坐标。必须是“位置”对象。
- 时间
- 该转换的 TDB (质心动力学时) 儒略日数。
Celestia 版本在低于 1.5.0 版本的版本使用 UTC (协调世界时) 儒略日数来进行该转换。
如果省略时间,则使用当前模拟时间。
说明
- CELX “位置”对象包含空间中一个点的精确坐标。位置是相对于坐标系而言的,在进一步使用之前可能需要转换为或从宇宙坐标转换为坐标系坐标。
- 可以使用 位置 方法处理 CELX “位置”对象。“位置”对象也可以用在其他需要“位置”对象作为参数的方法中。
- 旧版本的 Celestia 使用 UTC (协调世界时) 来计算时间和位置。从 1.5.0 版本开始,虽然 Celestia 仍然在屏幕上显示 UTC,但它在内部使用 TDB 时间标度来进行所有其他操作,所以对于 CELX 脚本来说 !!!
- TDB 时间标度与更熟悉的 UTC 有些不同。通过使用 TDB,Celestia 能更精确地定位天体。截至 2008 年 1 月 1 日,两者之间的差异约为 65 秒。有关更多信息,请参阅 Celestia/时间标度。
- 要转换 UTC 和 TDB 时间,可以使用 1.5.0 celestia:utctotdb() 和 1.5.0 celestia:tdbtoutc() 方法。
- 要转换普通日历日期和儒略日,可以使用 celestia:tojulianday() 和 celestia:fromjulianday() 方法。
旋转 frame:from(旋转:rfrot)
将旋转从该参考坐标系转换为宇宙参考坐标系。转换后的旋转将作为“旋转”对象返回。
参数
- rfrot
- 该参考坐标系的旋转,需要转换为宇宙参考坐标系。必须是“旋转”对象。
说明
- CELX “旋转”对象在内部是一个四元数,它是数学描述三维旋转的一种方法(即它可以转换为旋转矩阵)。旋转也可以用来描述物体的方位或观察者的方位(即观察者看向哪里,以及“向上”在哪里)。
- 可以使用 旋转 方法处理 CELX “旋转”对象。“旋转”对象也可以用在其他需要“旋转”对象作为参数的方法中。
字符串 frame:getcoordinatesystem()
返回一个描述坐标系坐标系的字符串。字符串将是以下之一
- universe
- ecliptic
- equatorial
- observer
- lock
- chase
- 1.6.0 bodyfixed
说明
- 在 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)
对象 frame:getrefobject()
获取该坐标系的参考对象,即坐标系中心,作为“对象”对象。
说明
- 对于宇宙参考坐标系,将返回一个 nil 对象。
- CELX “对象”对象指的是像行星或恒星这样的天体,但它也可以是位置或宇宙飞船。
- 可以使用 对象 方法处理 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)
object frame:gettargetobject()
获取相位锁定帧的目标对象,以“对象”对象的格式。
说明
- 对于非相位锁定帧,将返回一个 nil 对象。
- CELX “对象”对象指的是像行星或恒星这样的天体,但它也可以是位置或宇宙飞船。
- 可以使用 对象 方法处理 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)