3.8 KiB
3.8 KiB
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 剩余部分)
轨道线绘制
目标: 显示探测器的历史轨迹和未来路径
实现方法:
- 修改 API 调用,获取时间序列数据(如过去1年到未来1年)
- 创建
OrbitLine.tsx组件 - 使用 Three.js 的
Line或TubeGeometry绘制轨道 - 添加到 Scene 组件
代码位置: frontend/src/components/OrbitLine.tsx
时间选择器
目标: 允许用户选择起止时间查看不同时期的位置
实现方法:
- 创建
TimeSelector.tsx组件 - 使用日期选择器(或简单的 input[type="date"])
- 将选择的时间传递给 useSpaceData hook
- 重新获取数据并更新场景
代码位置: 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 阶段)
🔧 技术债务 & 改进
- 类型安全: 某些地方可以加强 TypeScript 类型定义
- 错误处理: 前端可以添加更详细的错误信息
- 性能优化: 大量天体时可考虑使用 InstancedMesh
- 测试: 尚未添加单元测试和集成测试
- 文档: API 文档可以更详细
📝 当前可用命令
后端
cd backend
source venv/bin/activate
python -m app.main
前端
cd frontend
yarn dev
🎉 成果展示
目前可以:
- 访问 http://localhost:5173
- 看到太阳系的 3D 可视化
- 使用鼠标控制视角
- 看到基于 NASA 真实数据的天体位置
- 看到漂亮的星空背景
数据实时从 NASA JPL Horizons 获取,包括:
- 7 个探测器(Voyager 1 & 2, New Horizons, Parker Solar Probe, Juno, Cassini, Perseverance)
- 9 个天体(太阳 + 八大行星)
总共 16 个天体的精确位置!