# K-Means 算法演示页面 - 快速开始

## 🎯 功能概览

这是一个完整的 K-Means 聚类算法可视化演示工具，集成在您的打字练习网站中。

### ✨ 核心功能

| 功能 | 说明 |
|------|------|
| 🎨 **可视化画布** | 800x600 像素的交互式画布 |
| 🎲 **随机生成点** | 可生成 1-200 个随机数据点 |
| 🖱️ **交互操作** | 左键添加点/质心，右键清空 |
| 🎯 **K值调节** | 支持 1-10 个聚类中心 |
| 📊 **算法演示** | 逐步展示 K-Means 算法过程 |
| 📏 **距离可视化** | 实时显示点到质心的距离 |
| 📑 **坐标显示** | 可选显示所有点的坐标 |
| 💾 **Excel支持** | 导入/导出数据到 Excel 文件 |

## 🚀 快速开始

### 步骤 1: 访问页面

- **开发环境**: http://localhost:3001/kmeans
- **导航入口**: 点击网站顶部导航栏的 "K-Means演示"

### 步骤 2: 基础操作

1. **设置参数**
   ```
   K值: 3 (想要分成几个簇)
   点的数量: 50
   ```

2. **生成数据**
   - 点击 "生成随机点" 按钮

3. **设置质心**
   - 在画布上点击 3 次（与K值相同）
   - 每个质心会用不同颜色标识

4. **运行算法**
   - 点击 "执行一步" 按钮
   - 观察算法逐步执行过程

5. **保存结果**
   - 点击 "导出Excel" 保存数据

## 📖 使用示例

### 示例 1: 基础聚类

```
目标: 将 50 个点分成 3 个簇

操作:
1. K值 = 3
2. 点的数量 = 50
3. 生成随机点
4. 点击画布 3 次设置质心
5. 持续点击"执行一步"直到完成
```

### 示例 2: 手动创建数据

```
目标: 手动创建特定分布的数据

操作:
1. K值 = 2
2. 在画布左侧点击 2 次设置质心
3. 在画布不同区域手动点击添加数据点
4. 勾选"显示坐标"查看具体位置
5. 执行算法查看聚类结果
```

### 示例 3: 导入已有数据

```
目标: 使用之前保存的数据

操作:
1. 点击"导入Excel"
2. 选择之前导出的 Excel 文件
3. 数据自动加载到画布
4. 继续执行算法或修改数据
```

## 🎨 界面说明

```
┌─────────────────────────────────────────────────┐
│  控制面板                                        │
│  [点数] [生成] [K值] [☑显示坐标] [执行] [清空]  │
│  [导出Excel] [导入Excel]                        │
├─────────────────────────────────────────────────┤
│                                                 │
│                  画布区域                        │
│              (800 x 600 像素)                   │
│                                                 │
│  ● 灰色点 = 未分配的数据点                      │
│  ● 彩色点 = 已分配到簇的点                      │
│  ◉ 大圆圈 = 质心点 (标记为 C1, C2, ...)         │
│  ─── 线段 = 距离连线（显示数值）                │
│                                                 │
├─────────────────────────────────────────────────┤
│  操作说明                                        │
│  • 左键: 添加点/质心                            │
│  • 右键: 清空画布                               │
│  • 当前迭代: 0                                  │
│  • 状态: 等待开始                               │
└─────────────────────────────────────────────────┘
```

## 🔍 算法过程详解

### 阶段 1: 初始化
- 设置 K 个质心点
- 生成或添加数据点

### 阶段 2: 分配簇（点击"执行一步"）
```
对于每个数据点:
  1. 计算到所有质心的距离 (显示线段和数值)
  2. 找出最短距离 (高亮显示为绿色)
  3. 将点分配给最近的质心 (点变成质心颜色)
  4. 清除距离线，处理下一个点
```

### 阶段 3: 更新质心
```
当所有点处理完毕:
  1. 计算每个簇的几何中心
  2. 移动质心到新的位置
  3. 检查是否收敛
```

### 阶段 4: 迭代或结束
```
如果质心位置改变:
  → 返回阶段 2，继续下一轮迭代

如果质心位置不变:
  → 算法收敛，显示"聚类完成"
```

## 📁 Excel 文件格式

导出的 Excel 文件包含以下列：

| 列名 | 说明 | 示例 |
|------|------|------|
| 类型 | 数据点或质心 | 数据点 / 质心 |
| 索引 | 编号 | 1, 2, 3... |
| X坐标 | 横坐标值 | 123.45 |
| Y坐标 | 纵坐标值 | 234.56 |
| 所属簇/颜色 | 簇编号或颜色代码 | 簇1 / #FF6B6B |

## ⌨️ 键盘快捷键

| 操作 | 快捷键 |
|------|--------|
| 清空画布 | 右键点击画布 |
| 添加点 | 左键点击画布 |

## 💡 使用技巧

### 技巧 1: 观察收敛过程
- 每次点击"执行一步"只处理一个点
- 可以清楚看到每个点如何选择最近的质心
- 适合教学演示

### 技巧 2: 测试不同 K 值
```
相同数据，不同K值的效果:
K=2: 粗分类
K=3: 中等细分
K=5: 细分类
```

### 技巧 3: 保存实验数据
- 每次实验后导出 Excel
- 可以在不同场景下重复使用相同数据
- 便于比较不同参数的效果

### 技巧 4: 质心初始化的影响
- 尝试在不同位置设置初始质心
- 观察对最终聚类结果的影响
- 理解 K-Means++ 的重要性

## ⚠️ 注意事项

1. **质心数量**: 必须设置完整的 K 个质心才能开始算法
2. **算法运行中**: 无法修改参数或添加新点
3. **右键操作**: 会清空整个画布，请谨慎使用
4. **浏览器兼容**: 需要支持 Canvas API 的现代浏览器
5. **性能考虑**: 建议点的数量不超过 200 个

## 🐛 常见问题

**Q: 为什么点击"执行一步"没反应？**
```
检查清单:
☐ 是否已设置了 K 个质心？
☐ 质心数量是否等于设置的 K 值？
☐ 是否有数据点？
```

**Q: 如何重新开始？**
```
方法 1: 点击"清空画布"按钮
方法 2: 右键点击画布
然后重新设置质心和数据点
```

**Q: Excel 导入失败？**
```
检查文件格式:
☐ 文件扩展名是 .xlsx 或 .xls
☐ 包含必需的列（类型、X坐标、Y坐标）
☐ 数值格式正确
```

**Q: 算法什么时候停止？**
```
停止条件:
• 各簇成员不再变化
• 质心位置稳定
• 显示"聚类完成"提示
```

## 🎓 教学场景

### 场景 1: 课堂演示
```
时间: 15-20分钟
内容:
1. 介绍 K-Means 基本概念 (5分钟)
2. 现场演示算法过程 (10分钟)
3. 讨论初始化和收敛 (5分钟)
```

### 场景 2: 实验课
```
时间: 45-60分钟
任务:
1. 不同 K 值的效果对比
2. 初始质心位置的影响
3. 记录迭代次数和结果
4. 提交实验报告（导出Excel）
```

### 场景 3: 自学练习
```
学习路径:
1. 阅读 KMEANS_README.md
2. 完成基础示例操作
3. 尝试不同参数组合
4. 理解算法原理
```

## 📚 相关文档

- **KMEANS_README.md** - 详细使用说明
- **KMEANS_DEPLOYMENT.md** - 部署和配置指南

## 🔗 访问链接

开发环境: http://localhost:3001/kmeans

立即体验 K-Means 算法的魅力！ 🚀
