cosmo/STATUS.md

3.8 KiB
Raw Blame History

Cosmo 项目当前状态

已完成

后端 (100%)

  • FastAPI 服务器搭建
  • 从 NASA JPL Horizons 获取数据
  • 实现 API 端点
    • /api/celestial/positions - 获取天体位置
    • /api/celestial/info/{id} - 获取天体信息
    • /api/celestial/list - 列出所有天体
  • 数据缓存机制3天TTL
  • CORS 配置
  • 支持时间范围查询

当前运行: http://localhost:8000

前端 (75%)

  • React + TypeScript + Vite 项目
  • Three.js 3D 场景
  • 实时数据获取和显示
  • 基本天体渲染(球体)
  • OrbitControls 相机控制
  • 星空背景
  • Loading 状态
  • 错误处理
  • Tailwind CSS 样式

当前运行: http://localhost:5173

🚧 下一步 (Stage 3 剩余部分)

轨道线绘制

目标: 显示探测器的历史轨迹和未来路径

实现方法:

  1. 修改 API 调用获取时间序列数据如过去1年到未来1年
  2. 创建 OrbitLine.tsx 组件
  3. 使用 Three.js 的 LineTubeGeometry 绘制轨道
  4. 添加到 Scene 组件

代码位置: frontend/src/components/OrbitLine.tsx

时间选择器

目标: 允许用户选择起止时间查看不同时期的位置

实现方法:

  1. 创建 TimeSelector.tsx 组件
  2. 使用日期选择器(或简单的 input[type="date"]
  3. 将选择的时间传递给 useSpaceData hook
  4. 重新获取数据并更新场景

代码位置: frontend/src/components/TimeSelector.tsx

🎯 Stage 4: 进阶交互

点击聚焦

  • 使用 Three.js Raycaster 检测点击
  • 相机平滑动画移动到目标
  • 使用 @react-three/drei 的 CameraControls 或手动实现

信息面板

  • 显示选中天体的详细信息
  • 距离、速度、最近的行星等
  • 使用 React Portal 或绝对定位的 div

天体列表侧边栏

  • 显示所有天体的列表
  • 点击可聚焦
  • 可筛选(行星/探测器)

🎨 Stage 5: 视觉优化

需要下载的资源

行星纹理 (https://www.solarsystemscope.com/textures/):

frontend/public/textures/
├── sun_diffuse.jpg
├── earth_diffuse.jpg
├── earth_normal.jpg
├── earth_specular.jpg
├── mars_diffuse.jpg
├── jupiter_diffuse.jpg
├── saturn_diffuse.jpg
└── ...

探测器 3D 模型 (https://nasa3d.arc.nasa.gov/models):

frontend/public/models/
├── voyager.glb
├── new_horizons.glb
├── parker_solar_probe.glb
└── ...

动态缩放

  • 根据相机距离调整物体大小
  • 确保远距离时仍能看到物体
  • 公式: scale = Math.max(1, distance * MIN_VISIBLE_SCALE)

📊 进度统计

阶段 进度 状态
Stage 1: 后端基础 100% 完成
Stage 2: 前端基础 100% 完成
Stage 3: 数据集成 70% 🚧 进行中
Stage 4: 交互功能 0% 待开始
Stage 5: 视觉优化 0% 待开始

总体进度: ~54% (2.7/5 阶段)

🔧 技术债务 & 改进

  1. 类型安全: 某些地方可以加强 TypeScript 类型定义
  2. 错误处理: 前端可以添加更详细的错误信息
  3. 性能优化: 大量天体时可考虑使用 InstancedMesh
  4. 测试: 尚未添加单元测试和集成测试
  5. 文档: API 文档可以更详细

📝 当前可用命令

后端

cd backend
source venv/bin/activate
python -m app.main

前端

cd frontend
yarn dev

🎉 成果展示

目前可以:

  1. 访问 http://localhost:5173
  2. 看到太阳系的 3D 可视化
  3. 使用鼠标控制视角
  4. 看到基于 NASA 真实数据的天体位置
  5. 看到漂亮的星空背景

数据实时从 NASA JPL Horizons 获取,包括:

  • 7 个探测器Voyager 1 & 2, New Horizons, Parker Solar Probe, Juno, Cassini, Perseverance
  • 9 个天体(太阳 + 八大行星)

总共 16 个天体的精确位置!