从任意星体表面(辉 / 苍 / 辉烬 / 纪年)或上帝视角观察其他天体在太阳历内的运动。时间单位 simulatedDays = 太阳日:在赤道、辉烬轨道与自转同向共面时,严格对应辉烬一次升落(相邻上中天)。辉烬为主照明、纪年定年节、苍为近轨「圆月」;虚构星系,参数可调。
| 依赖 | 说明 |
|---|---|
| Three.js 0.160.0 | 场景、网格、光照、渲染 |
OrbitControls |
上帝视角下旋转/平移/缩放 |
lil-gui |
右侧参数面板 |
es-module-shims |
部分浏览器对 import map 的兼容 |
依赖通过 index.html 中的 import map 从 unpkg.com 加载,无需本地 npm install。
本项目使用 ES Module,需通过 HTTP(S) 访问(直接双击打开 file:// 可能因浏览器策略无法加载模块)。
在项目根目录启动任意静态服务器即可,例如:
# Python 3
python -m http.server 8080
# Node(如已安装 npx)
npx --yes serve .浏览器打开 http://localhost:8080(端口以实际命令为准)。
xing/
├── index.html # 入口页、import map、内联 UI 样式
├── main.js # 全部模拟与渲染逻辑
├── style.css # 全局样式
└── README.md # 本说明
维护时绝大部分逻辑在 main.js;改天体默认参数可编辑文件顶部的 config 对象。
simulatedDays的单位 = 太阳日(辉烬升落周期,赤道共面近似)。- 恒星周期间隔
hui.siderealDayDays:多少 太阳日 完成相对恒星的一周自转(默认 182.5 = 半年)。 - 辉烬与苍的公转周期不由手填独立决定,而是由联立公式推出,使太阳日恒为 1:
在自转与公转同向、共面时,相对惯性系角速度满足
ω_辉烬 − ω_辉自转 = 2π / 1太阳日,即(周期均以太阳日计):
1/T_辉烬 − 1/T_恒星 = 1 ⇒ T_辉烬 = T_恒星 / (T_恒星 + 1)
- 苍:
T_苍 = T_辉烬 / N,其中story.cangOrbitsPerHuijinOrbit(默认 2)表示辉烬每绕辉一圈苍转几圈。
默认数值示例(T_恒星 = 182.5):T_辉烬 ≈ 0.99455 太阳日/周,T_苍 ≈ 0.49728 太阳日/周。
近似说明:辉烬轨道存在倾角时,非赤道纬度上太阳日会与上式略有偏差;叙事上仍以赤道共面定义为计时基准。
Δ太阳日 = Δ真实秒 × daysPerRealSecond × timeSpeed
单帧 Δ真实秒 上限约 0.25 s。
| 概念 | 配置项 / 变量 | 含义 |
|---|---|---|
| 累计时间 | simulatedDays |
自启动以来经过的太阳日(可重置) |
| 换算 | daysPerRealSecond |
每真实 1 秒推进多少太阳日 |
| 年长 | yearLengthDays |
「年内第几日」模长;纪年默认一圈 = 此值(太阳日) |
辉星自转:rotation.y = 2π × (simulatedDays / siderealDayDays) + 初相。
辉烬 / 苍:getHuijinOrbitalPeriodSolarDays()、getCangOrbitalPeriodSolarDays()(见 main.js)。
纪年:仍用手动 orbitalPeriodDays(太阳日/周),默认与年长对齐。
关闭 solarDayLink 时,辉烬、苍改用 huijin.orbitalPeriodDays、cang.orbitalPeriodDays 手动值(太阳日/周),不再保证 1 单位时间 = 1 太阳日。
| 名称 | 角色 | 备注 |
|---|---|---|
| 辉 | 中心球体 | siderealDayDays 默认 182.5 太阳日/恒星周 |
| 辉烬 | 主照明 | 联立下周期 ≈ T_恒星/(T_恒星+1) 太阳日/周 |
| 苍 | 卫星 | 联立下周期 = 辉烬 / cangOrbitsPerHuijinOrbit |
| 纪年 | 年星 | 默认 365 太阳日/周,与 yearLengthDays 一致 |
GUI:太阳日联立 文件夹、苍=每辉烬圈×2、辉自转=半年/周、纪年周期=年长。
- 环境光
ambientIntensity默认较低,日夜对比主要来自辉烬点光源;纪年光源为辅。 - 苍 使用较高
emissiveIntensity表现设定中的「恒为圆月、无圆缺」观感(非物理月相)。 - 第一人称 FOV 默认约 88°(
config.rendering.fovDegreesObserver),上帝视角默认 60°;可在「渲染」文件夹调节。
轨道几何:半径、倾角、经度与 createOrbitLine / updateCelestialBodies 中同一套旋转一致;改公式时需同步轨道线生成逻辑。
- 上帝视角:左键旋转、右键平移、滚轮缩放;
OrbitControls启用。 - 第一人称观测:在 GUI「视角控制」中切换;
观测锚点可选辉 / 苍 / 辉烬 / 纪年,经纬度相对于该球体本地坐标(辉星会叠加自转)。 - 左上角:太阳历、当前辉烬/苍推导周期、年内日序、季节(辉星锚点第一人称按纪年高度角;上帝视角为示意)。
- 右侧 GUI:模拟控制、辉星自转、各天体轨道、轨迹记录等。
- 左下 debug:初始化与轨迹分析日志(
debugLog)。
开启记录后,在观察者模式下会按帧采样;时间戳为 simulatedDays(太阳日)。轨迹为世界坐标折线,多用于定性观察。