Celestia 中文文档 下载 App

Lua 模块:从轨道公式到完全自定义天体

Lua 在 Celestia 里做什么

Lua 模块给 Celestia 添加了可编程天体的能力:

这意味着你可以让天体做任何数学公式能描述的运动——螺旋下落、正弦震荡、追逐飞行、完全自定义。

Lua 模块的位置

Celestia/
├── extras/
│   └── MyAddon/
│       ├── data/
│       │   └── myobject.ssc        ← 天体数据(引用 Lua)
│       └── celxx/                  ← Lua 模块放这里
│           └── myorbit.lua

Lua 文件放 celxx/ 目录,.ssc 数据文件里用 ScriptedOrbit 指令引用它。

最简单的 Lua 轨道示例

celxx/sine_wave.lua:

-- 定义一个正弦轨道:天体在半径 1AU 的圆上做正弦振荡运动
function computePosition(date)
    local t = date - 2451545.0  -- J2000 历元
    local angle = t * 0.01      -- 角速度
    local radius = 1.0          -- AU
    local offset = math.sin(t * 0.001) * 0.1  -- 正弦振荡

    return {
        radius * math.cos(angle) + offset,
        radius * math.sin(angle),
        0
    }
end

data/myasteroid.ssc:

Asteroid "My Asteroid" {
    Radius 500        -- km
    Orbit {
        Frame "EquatorialJ2000"
        ScriptedOrbit { Module "sine_wave" }
        Period 10      -- 不是开普勒轨道,这里 Period 仅用于显示
    }
    Body {
        Color [0.5 0.5 0.5]
        Albedo 0.5
    }
}

加载后 Celestia 会用 Lua 函数实时计算这颗小行星的位置——它的运动完全由公式定义,可以做任何非开普勒的曲线。

著名的 Lua 添加件

Celestia Lua Universal Tools(LUT)——Motherlode 上最火的 Lua 增强包,核心功能:

LUT 的源码就是极好的 Celestia Lua 学习资料——每个模块都有注释,覆盖了 Celestia Lua API 的主要用法。

Lua API 速查

Celestia 暴露给 Lua 的关键 API:

方法作用
celestia:getSelection()当前选中的天体
celestia:getSimulationTime()当前模拟时间
celestia:find("name")按名字查找天体
body:getPosition()天体当前位置(AU)
body:getDistanceTo(other)两天体间距离
body:getRadius()天体半径(km)