Celestia/Celx 脚本/CELX Lua 方法/Celx 阶段
外观
1.6.0 阶段类在 Celestia 版本 1.6.0 之前不可用。
对象的轨迹被细分为一个或多个阶段。
每个阶段都有自己的
- 轨迹;
- 旋转模型;
- 轨道坐标系;
- 本体坐标系。
可以通过两种方式获取对象的阶段
- 使用 1.6.0 object:getphase() 方法,该方法返回指定时间的活动阶段,或者
- 使用 1.6.0 object:phases() 方法,该方法返回对象时间轴中所有阶段的迭代器。
示例
惠更斯探测器的轨迹可能包含三个阶段
- 附着在卡西尼号上
- 卡西尼号的本体固定坐标系;
- 轨迹只是一个固定位置。
- 分离后的自由飞行
- 以土星为中心的坐标系;
- 来自 xyz 文件或 SPICE 的轨迹
- 在泰坦表面 (Celestia 1.6.0 中尚未实现)
- 泰坦固定坐标系;
- 轨迹是一个固定位置。
本章包含所有可用的阶段方法列表,这些方法可用于 "阶段" 对象。
1.6.0 数字, 数字 phase:timespan()
返回此时间轴阶段的开始时间和结束时间,以两个 TDB (质心动力学时间) 儒略日数字表示。
注意
- 阶段的开始时间始终等于前一阶段的结束时间。
- 对于在任何时间都有效的阶段,开始时间和结束时间将分别等于特殊浮点数 -infinity 和 +infinity。
- 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() 方法。
示例
检索卡西尼号时间轴各阶段的开始时间和结束时间。
object = celestia:find("Sol/Cassini") count = 0 for phase in object:phases() do count = count + 1 begintime, endtime = phase:timespan() celestia:print("Phase [" .. count .. "] of " .. object:name() .. "\nStart: " .. begintime .. " End: " .. endtime, 5.0, -1, -1, 2, 4) wait(5.0) end
1.6.0 坐标系 phase:orbitframe()
返回此时间轴阶段的轨道坐标系,作为 "坐标系" 对象。
示例
显示惠更斯在从卡西尼号分离后的自由飞行期间的轨道坐标系参考对象。
tdbtime = celestia:utctotdb(2005, 01, 01) celestia:settime(tdbtime) object = celestia:find("huygens") celestia:select(object) phase = object:getphase(tdbtime) -- Orbit frame obj_orbf = phase:orbitframe() object2 = obj_orbf:getrefobject() -- Goto object and print message obs = celestia:getobserver() obs:gotolonglat(object, math.rad(42), math.rad(14), 0.033, 2.0) celestia:print("Orbit frame reference object during this phase of " .. object:name() .. " is: " .. object2:name(), 10.0, -1, -1, 2, 4) wait(10.0)
1.6.0 坐标系 phase:bodyframe()
返回此时间轴阶段的本体坐标系,作为 "坐标系" 对象。
示例
显示惠更斯在卡西尼号飞往土星的途中,其飞行的本体坐标系参考对象。
tdbtime = celestia:utctotdb(2004, 06, 01) celestia:settime(tdbtime) object = celestia:find("huygens") celestia:select(object) phase = object:getphase(tdbtime) -- Body frame obj_bodyf = phase:bodyframe() object2 = obj_bodyf:getrefobject() -- Goto object and print message obs = celestia:getobserver() obs:gotolonglat(object, math.rad(42), math.rad(14), 0.033, 2.0) celestia:print("Body frame reference object during this phase of " .. object:name() .. " is: " .. object2:name(), 10.0, -1, -1, 2, 4) wait(10.0)
1.6.0 位置 phase:getposition(数字:时间)
返回指定时间的 坐标系坐标 中的位置,作为 "位置" 对象。
参数
- 时间
- 用于确定位置的时间,作为 TDB (质心动力学时间) 儒略日数字表示。
超出阶段覆盖范围的时间将自动钳制到范围的开头或结尾。
注意
- Celestia 中的位置分量 (X,Y,Z) 以光年的百万分之一存储。因此,当您希望以公里或英里定义您的位置时,您必须转换这些位置。因此,您可以使用一个常量,该常量必须先在您的脚本中初始化
- 从光年的百万分之一到公里,使用常数 uly_to_km = 9460730.4725808。
- 从光年的百万分之一到英里,使用常数 uly_to_mls = 5912956.5453630。
- 接下来,您可以将光年的百万分之一转换为公里或英里,如下所示
- km = 数字:光年的百万分之一 * uly_to_km
- miles = 数字:光年的百万分之一 * uly_to_mls
- 可以对 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() 方法。
示例 1
获取惠更斯在 第一 阶段特定时间的 位置。
uly_to_km = 9460730.4725808 tdbtime = celestia:utctotdb(2004, 06, 01) celestia:settime(tdbtime) object = celestia:find("huygens") celestia:select(object) phase = object:getphase(tdbtime) obj_posf = phase:getposition(tdbtime) -- Goto object and print message obs = celestia:getobserver() obs:gotolonglat(object, math.rad(42), math.rad(14), 0.033, 2.0) celestia:print(object:name() .. " frame coordinates at 2004, 06, 01, 00:00:00 hr are:\n" .. "X: " .. obj_posf.x*uly_to_km*1000 .. " meter\n" .. "Y: " .. obj_posf.y*uly_to_km*1000 .. " meter\n" .. "Z: " .. obj_posf.z*uly_to_km*1000 .. " meter", 10.0, -1, -1, 2, 6) wait(10.0)
示例 2
获取惠更斯在 第二 阶段特定时间的 位置。
uly_to_km = 9460730.4725808 tdbtime = celestia:utctotdb(2005, 01, 01) celestia:settime(tdbtime) object = celestia:find("huygens") celestia:select(object) phase = object:getphase(tdbtime) obj_posf = phase:getposition(tdbtime) -- Goto object and print message obs = celestia:getobserver() obs:gotolonglat(object, math.rad(42), math.rad(14), 0.033, 2.0) celestia:print(object:name() .. " frame coordinates at 2005, 01, 01, 00:00:00 hr are:\n" .. "X: " .. obj_posf.x*uly_to_km .. " km\n" .. "Y: " .. obj_posf.y*uly_to_km .. " km\n" .. "Z: " .. obj_posf.z*uly_to_km .. " km", 10.0, -1, -1, 2, 6) wait(10.0)
1.6.0 旋转 phase:getorientation(数字:时间)
返回指定时间的 坐标系坐标 中的方向,作为 "旋转" 对象。
参数
- 时间
- 用于确定方向的时间,作为 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() 方法。
示例
tdbtime = celestia:utctotdb(2005, 01, 01) celestia:settime(tdbtime) object = celestia:find("huygens") celestia:select(object) phase = object:getphase(tdbtime) obj_rotf = phase:getorientation(tdbtime) ...