跳转到内容

Celestia/Celx 脚本/CELX Lua 方法/CEL 命令 gotolonglat

来自 Wikibooks,开放世界的开放书籍

gotolonglat

[编辑 | 编辑源代码]

gotolonglat { time <持续时间> distance <半径距离> up <向上向量> longitude <经度数值> latitude <纬度数值> }

移动到当前选定的物体,花费 <持续时间> 秒,在距离物体 <半径距离> 处停止,使用 <向上向量> 方向,将自己定位在指定的经度 <经度数值> 和纬度 <纬度数值> 表面坐标上方。

注意:gotolonglat 命令不会重置坐标系。它保留先前设置的坐标系。

参数

time <持续时间>
移动到物体的秒数。默认值为 1.0 秒。
distance <半径距离>
描述您希望定位到物体多远,以物体的半径为单位,加 1。默认值为 5.0。
特殊的 <距离> 值为
  • 0(零)是物体的中心。
    注意:在 1.3.1 版本中,使用此值会导致程序错误地识别后续定位值,因此请勿使用零。
  • 1 是物体的表面。
    注意:移动到物体的精确表面级别可能会导致某些显卡在显示屏上显示随机多边形,因此最好使用略高于表面的值。
up <向上向量>
定义哪个轴向上,X [1 0 0],Y [0 1 0] 或 Z [0 0 1]。默认值为 [0 1 0]。
longitude <经度数值>
此值描述您希望定位到的经度表面坐标,应以度为单位指定为十进制值。无默认值。
经度对于西半球指定为负数,对于东半球指定为正数(“+”号不是必需的)。
latitude <纬度数值>
此值描述您希望定位到的纬度表面坐标,应以度为单位指定为十进制值。无默认值。
纬度对于南半球指定为负数,对于北半球指定为正数(“+”号不是必需的)。


CELX 等效

基于 observer:gotolonglat() 方法。

  • 找到要前往的名称为 <字符串> 的目标物体并存储在“objectname”中。
    在 CELX 脚本中,无需选择“objectname”。
objectname = celestia:find( <string> )
  • 确定“objectname”的半径并存储在“radius”中。
radius = objectname:radius()
  • 确定以公里为单位的移动距离:<半径距离> * “radius” 并存储在“distance”中。
distance = <radiusdistance> * radius
  • 将 <经度数值> 和 <纬度数值> 从度转换为弧度,方法是将度数乘以 math.pi(= 3.14159265)并除以 180。Lua 的“math.rad()”函数也可以用于此。
longitude = math.rad( <longnumber> )
latitude = math.rad( <latnumber> )
  • 定义一个向量对象,以确定哪个轴向上。
upaxis = celestia:newvector( <upvector> )
  • 获取活动视图的观察者实例,并转到在确定距离“distance”处位于“objectname”表面上的“longitude”和“latitude”表面坐标,时间为 <持续时间> 秒。
    • 如果没有给出 <持续时间>,则默认时间为 5.0 秒!!!
    • 如果没有给出 <距离>,则默认为物体半径的 5 倍。
    • 如果没有给出 <经度>,则默认为 0。
    • 如果没有给出 <纬度>,则默认为 0。
    • 如果没有给出 <向上向量>,则默认为 (0,1,0) -> Y。
obs = celestia:getobserver()
obs:gotolonglat(objectname, longitude, latitude, distance, <duration>, upaxis )
  • 等待 <持续时间> 秒。
wait( <duration> )

总结

objectname = celestia:find( <string> )
radius = objectname:radius()
distance = <radiusdistance> * radius
longitude = math.rad( <longnumber> )
latitude = math.rad( <latnumber> )
upaxis = celestia:newvector( <upvector> )
obs = celestia:getobserver()
obs:gotolonglat(objectname, longitude, latitude, distance, <duration>, upaxis )
wait( <duration> )

示例
此示例选择地球并将摄像机定位在美國華盛頓州西雅圖上空。

CEL

select      { object "Sol/Earth" }
synchronous { }
gotolonglat { time 5 distance 3 up [0 1 0] longitude -122 latitude 47 }
print       { text "Traveling to Seattle, Washington, USA."
              row -3 column 1 duration 5 }
wait        { duration 5 }
print       { text "Hovering over Seattle, Washington, USA."
              row -3 column 1 duration 5 }
wait        { duration 5 }

使用 observer:gotolonglat() 方法的CELX

earth = celestia:find("Sol/Earth")
celestia:select(earth)
obs = celestia:getobserver()
obs:synchronous(earth)
earthradius = earth:radius()
earthdistance = 3 * earthradius
longitude = -122 * math.pi/180
latitude = 47 * math.pi/180
upaxis = celestia:newvector(0,1,0)
obs:gotolonglat(earth, longitude, latitude, earthdistance, 5.0, upvector)
celestia:print("Traveling to Seattle, Washington, USA.", 5.0, -1, -1, 1, 3)
wait(5.0)
celestia:print("Hovering over Seattle, Washington, USA.", 5.0, -1, -1, 1, 3)
wait(5.0)


返回 CEL 命令索引

华夏公益教科书