# Three-Body Problem Simulation (Web Version)

![License](https://img.shields.io/badge/license-MIT-blue.svg)

一个运行在浏览器中的三体运动模拟器。基于刘慈欣科幻小说《三体》的灵感，使用 HTML5 Canvas 和 JavaScript 原生实现。

本项目不仅仅是天体物理模拟，还包含了一个简易"文明生存模拟"系统，模拟位于三体系统中一颗行星上的文明，在乱纪元与恒纪元交替中的生存历程。

## 🌟 主要特性 (Features)

### 物理模拟
- **真 3D 物理引擎**：使用 **Runge-Kutta 4阶积分法 (RK4)** 进行 N 体引力解算，保证了模拟的高精度和稳定性。
- **自定义初始条件**：支持随机生成，或使用经典的三体结构预设（如"一大两小"、"三星同质"等）。
- **3D 投影渲染**：不依赖 WebGL 库，使用原生 Canvas 2D API 手写 3D 投影矩阵，实现独特的视觉风格。

### 文明模拟系统
- **生存判定**：实时计算行星表面温度。
  - **宜居带 (恒纪元)**：273K - 373K (0°C - 100°C)
- **文明演化**：根据文明存续时间，从"原始部落"逐步演化至"神级文明"。
- **排行榜**：记录历史上存活时间最长的文明及其毁灭原因，支持复现历史文明的初始状态。

## 🏛️ 文明发展阶段 (Civilization Eras)

模拟器中的文明发展速度设定参考了三体人的特性（记忆遗传、极高的危机感与效率），具体阶段映射如下：

| 存续时间 | 文明时代 | 描述 |
|:---:|:---|:---|
| < 1 年 | **文明萌芽** | 脱水状态中的原始生命 |
| < 5 年 | **原始部落** | 开始形成群体意识 |
| < 20 年 | **氏族时代** | 记忆遗传加速知识传承 |
| < 50 年 | **城邦时代** | 建立稳定纪元预测体系 |
| < 100 年 | **王朝时代** | 大规模脱水储存技术成熟 |
| < 200 年 | **科学启蒙** | 开始理性认识三体运动 |
| < 500 年 | **工业时代** | 建造地下城市躲避乱纪元 |
| < 1,000 年 | **原子时代** | 掌握核能，尝试预测恒星轨道 |
| < 2,000 年 | **信息时代** | 超级计算机模拟三体问题 |
| < 5,000 年 | **太空时代** | 发射探测器研究恒星 |
| < 10,000 年 | **恒星际时代** | 开始寻找宜居星系 |
| < 50,000 年 | **舰队时代** | 建造星际舰队，准备远征 |
| < 100,000 年 | **远征时代** | 向其他恒星系派遣舰队 |
| < 500,000 年 | **殖民时代** | 在多个星系建立殖民地 |
| < 100 万年 | **星域文明** | 统治数十个恒星系统 |
| < 1,000 万年 | **银河文明** | 接近II型卡尔达肖夫文明 |
| < 1 亿年 | **超级文明** | 掌握维度操控技术 |
| ≥ 1 亿年 | **神级文明** | 超越物理法则的存在 |

## 💀 毁灭原因一览 (Extinction Events)

文明可能会因为以下物理原因而毁灭：

1.  **永久冰封 (Eternal Freeze)**
    *   条件：地表温度 < 150K (-123°C)
    *   描述：行星远离恒星，大气冻结，文明无法维持最低限度的能量循环。
2.  **焚烧殆尽 (Scorched Earth)**
    *   条件：地表温度 > 500K (227°C)
    *   描述：极度靠近恒星，海洋蒸发，地表焦黑。
3.  **撕裂 (Roche Limit)**
    *   条件：距离恒星 < 洛希极限
    *   描述：被恒星的潮汐力撕碎，行星解体。
4.  **吞噬 (Engulfed)**
    *   条件：距离恒星 < 恒星物理半径 * 1.5
    *   描述：直接坠入恒星，被高温等离子体气化。
5.  **高速撞击 (Kinetic Impact)**
    *   条件：近距离且相对速度极高
    *   描述：高速掠过恒星表面，动能转化为毁灭性冲击波。
6.  **大气剥离 (Atmosphere Stripping)**
    *   条件：强辐射压 + 极近距离 (< 0.5 AU)
    *   描述：恒星风吹走大气层，地表暴露于致命宇宙辐射。
7.  **引力撕裂 (Gravitational Tear)**
    *   条件：位于多颗恒星的强引力共振区
    *   描述：被多颗恒星同时拉扯，地壳应力过大导致崩解。
8.  **流浪行星 (Rogue Planet)**
    *   条件：距离质心 > 500 AU
    *   描述：被引力弹弓效应抛出星系，进入永恒的黑暗寒冷。
9.  **轨道衰减 (Orbital Decay)**
    *   条件：极近距离且径向速度指向恒星中心
    *   描述：螺旋式坠入恒星。
10. **地壳崩解 (Structural Failure)**
    *   条件：极端高温震荡
    *   描述：短时间内温度剧烈变化导致的地质结构崩溃。

## 🎮 操作说明 (Controls)

### 视角控制
- **旋转**：按住 **鼠标左键** 拖拽
- **平移**：按住 **鼠标右键** 拖拽
- **缩放**：滚动 **鼠标滚轮**

### 模拟控制
- **速度调节**：通过滑块或倍速按钮 (1x - 1000x) 调整时间流逝速度。
- **重置**：生成新的随机三体系统。
- **视角预设**：快速切换 XY/XZ/YZ 平面视图。

## 🔧 技术细节

- **核心算法**: Newton's Law of Universal Gravitation + RK4 Integrator
- **技术栈**: 原生 HTML5 / CSS3 / JavaScript (ES6+)
- **依赖**: 无任何第三方依赖，单文件即可运行。

## 🚀 如何运行

1. 下载 `three-body-simulation.html` 文件。
2. 直接使用现代浏览器（Chrome, Edge, Firefox, Safari）打开即可。

## 📄 License

MIT License
