Skip to content

zerobusterr/xing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

辉星系虚拟天文模型(居住者视角)

任意星体表面(辉 / 苍 / 辉烬 / 纪年)或上帝视角观察其他天体在太阳历内的运动。时间单位 simulatedDays = 太阳日:在赤道、辉烬轨道与自转同向共面时,严格对应辉烬一次升落(相邻上中天)。辉烬为主照明、纪年定年节、苍为近轨「圆月」;虚构星系,参数可调。

技术栈

依赖 说明
Three.js 0.160.0 场景、网格、光照、渲染
OrbitControls 上帝视角下旋转/平移/缩放
lil-gui 右侧参数面板
es-module-shims 部分浏览器对 import map 的兼容

依赖通过 index.html 中的 import mapunpkg.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 对象。

时间模型(维护重点)

太阳日与联立(默认开启 solarDayLink

  • 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.orbitalPeriodDayscang.orbitalPeriodDays 手动值(太阳日/周),不再保证 1 单位时间 = 1 太阳日。

天体与默认(config

名称 角色 备注
中心球体 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(太阳日)。轨迹为世界坐标折线,多用于定性观察。

About

架空世界的星体模拟观察系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors