天文可视化单页应用,在浏览器中观察太阳、月亮、行星、恒星和天球网格的运行规律。
Space View(空间视角)
- 以"观测者"或"天球"两种参考系展示太阳系天体和恒星
- 支持赤道网格、黄道、至日/分点标记
- 中西星官星图切换(中国星官 / 西方星座)
- 三垣二十八宿文化探索:四象分组、星官检索、来源说明与中西星名对照
- 在地面/空间视角中圈选已核实的代表星;切换中西星图可比较同一颗星的命名
- 展示行星位置、太阳周年视运动轨迹
Earth View(地面视角)
- 站在地面观察天空半球
- 太阳周日运动,随时间变化
- 赤纬圈、时圈网格
- 可调节观测纬度、经度,并提供常用城市预设
观测设置
- 使用 UTC 日期时间输入、“现在”按钮和前后 1 小时 / 1 天步进控制仿真时间
- 通过经纬度或城市预设切换观测位置
- 鼠标拖拽旋转视角(Space View 使用 OrbitControls)
- 控制面板切换模式、时间、观测位置、播放速度和显示选项
- 在“星空体系”下展开“三垣二十八宿”,选择或搜索条目;上一项/下一项可连续阅读,关闭或“清除高亮”可退出圈选
本版收录三垣、二十八宿及北斗/织女/河鼓共 34 个导览条目。三垣、5 宿和3个星官提供已核实的代表星示例,其他宿保留分组和来源,并明确标记尚未接入代表星。金色圆环是示例恒星,不是星区边界或完整成员表;没有补画未经核实的线段。
星官是传统命名的星群,宿也可指相关天区,不能与现代 IAU 的 88 个有边界星座简单一一对应。页面使用现代常用星名对应和项目已有的 J2000 坐标,不声称复原某一朝代的完整星图。资料来源与已知边界见 文化导览说明。
- Vite 6 + React 18 + TypeScript 5
- Three.js / @react-three/fiber / @react-three/drei
- Zustand(状态管理)、Tailwind CSS(样式)
- astronomy-engine(天文计算)
npm install
npm run devsrc/
├── App.tsx # Canvas 入口
├── components/
│ ├── scene/
│ │ ├── SpaceView.tsx # 空间视角场景
│ │ ├── EarthView.tsx # 地面视角场景
│ │ ├── builders/ # 场景数据构建
│ │ └── layers/ # 参考系图层
│ └── ui/
│ └── ControlPanel.tsx # 控制面板
├── store/
│ └── useAppStore.ts # 状态管理
└── utils/
├── astronomy.ts # 基础坐标转换
├── ephemeris.ts # 天体位置计算
├── stars.ts # 星表数据
├── starField.ts # 星点渲染
├── skyProjection.ts # 天球投影
└── sunPaths.ts # 太阳路径
- 天体、恒星与天球网格统一使用地心 J2000 赤道坐标;地平投影包含岁差、章动和视恒星时,支持南北极与天顶。当前为几何天空演示,未加入站心视差或大气折射。
- 稳定天空通过整体旋转更新,月相由 shader 绘制;暂停后按需刷新,仍可拖动视角和修改观测设置。
- 太阳、月亮、行星与周日轨迹使用同一帧的精确仿真时间;所有倍速采用相同的位置、显隐、光照与采样规则,不按速度降低刷新或画质。关闭图层后停止相应绘制与求解,重新开启使用当前坐标。
1周/秒保留真实的时间倍率和东升西落。在地平参考系,它相当于每真实秒约七个昼夜;60fps 的相邻位置仍可相隔约42°。天球参考系中太阳沿周年路径移动、地平叠加层旋转,两者的原有含义不变。实现与验证见 逐帧天体修复。
npm run test
npm run check
npm run lint
npm run build自动回归覆盖投影、坐标历元、时钟和城市更新;交互与视觉效果还需在浏览器中检查。
性能对照可运行(基线提交须在当前 Git 历史中):
node scripts/benchmark-performance.mjs --baseline=ed5b07398ba73302335cd0bee094367bbbb90d28该脚本交替测量基线/当前 CPU 热点并校验数值输出,不代表浏览器 FPS、GPU 耗时或首屏加载速度。优化不减少恒星、采样点、线段、字体或纹理分辨率。
- 构建会生成
build-info.json,只包含经校验的 Git commit SHA、功能版本和部署环境,可核对域名实际上线的版本,不导出其他环境变量 - 3D 场景需要 WebGL 2;如果图形初始化失败,页面显示局部提示与手动重试,保留控制面板和文化导览。该提示不代表 3D 渲染已经通过验证