# A*寻路算法网格改进实施计划

## 现状分析

**现有A*实现架构**：

- `AutoPathFinder.cs` - 核心A*算法实现，使用RoyT.AStar库
- `GridMap.cs` - 网格地图数据结构，目前主要基于包围盒生成
- `GridMapGenerator.cs` - 网格生成器，使用简单的包围盒方法
- `CategoryAttributeManager.cs` - 已实现通道识别和分类功能
- `ChannelHeightDetector.cs` - 已实现射线-三角形相交和三角形提取

**核心问题**：

- 当前网格生成使用`CalculateCombinedBounds()`简单包围盒方法，精度不足
- 缺乏精确的通道覆盖计算
- 没有2.5D高度信息支持

## 实施方案

### 第一阶段：创建ChannelBasedGridBuilder （2天）

#### 1.1 新增核心类文件

**文件位置**: `src/PathPlanning/ChannelBasedGridBuilder.cs`

**主要功能**：

- 集成现有的`CategoryAttributeManager.GetItemsByCategory("通道")`获取通道
- 复用`ChannelHeightDetector.ExtractTrianglesFromModelItem()`提取三角形
- 复用`ChannelHeightDetector.RayTriangleIntersect()`进行相交测试
- 实现智能投影策略：
  - 薄通道（<1.5m）优先使用顶面提取投影
  - 复杂通道使用空间哈希优化的射线扫描

#### 1.2 扩展GridMap数据结构

**修改文件**: `src/PathPlanning/GridMap.cs`

**新增字段**：

```csharp
public struct GridCell
{
    // 现有字段保持不变
    public bool IsWalkable { get; set; }
    public double Cost { get; set; }
    public ElementType Type { get; set; }
    
    // 新增字段
    public bool IsInChannel { get; set; }
    public List<HeightInterval> PassableHeights { get; set; }
    public ChannelType ChannelType { get; set; }
}
```

#### 1.3 创建空间哈希优化类

**文件位置**: `src/PathPlanning/TriangleSpatialHash.cs`

### 第二阶段：创建VerticalScanProcessor （3天）

#### 2.1 新增垂直扫描处理器

**文件位置**: `src/PathPlanning/VerticalScanProcessor.cs`

**主要功能**：

- 多级筛选优化：邻域筛选 → 高度筛选 → 空间哈希
- 复用现有的`AutoPathObstacleDetector.CheckIfObstacle()`障碍物识别
- 并行扫描处理，计算2.5D高度区间

#### 2.2 集成到现有GridMapGenerator

**修改文件**: `src/PathPlanning/GridMapGenerator.cs`

**新增方法**：

- `GenerateFromBIM()` 增加 `GridGenerationMode` 枚举参数
- 新增 `GridGenerationMode.ChannelBased2_5D` 模式
- 保持向后兼容的 `GridGenerationMode.BoundingBox` 模式

### 第三阶段：AutoPathFinder集成改进 （2天）

#### 3.1 修改AutoPathFinder调用链

**修改文件**: `src/PathPlanning/AutoPathFinder.cs`

**关键改动**：

- `FindPath()`方法增加通道数据参数
- 在`ConvertToAStarGrid()`中使用新的通道覆盖数据
- 支持高度约束的路径规划

#### 3.2 更新PathPlanningManager

**修改文件**: `src/Core/PathPlanningManager.cs`

**集成点**：

- `AutoPathPlanning()`方法中调用新的网格生成模式
- 传递物体高度参数给网格生成器
- 保持现有的UI事件机制不变

### 第四阶段：性能优化和测试 （2天）

#### 4.1 性能监控和调优

- 添加性能统计日志
- 调优空间哈希参数
- 并行化优化

#### 4.2 向后兼容性测试

- 确保现有的命令模式(`AutoPathPlanningCommand`)正常工作
- UI集成测试（WPF ViewModels）
- 验收标准测试

## 关键技术要点

### 复用现有代码策略

1. **几何处理完全复用**：
   - `ChannelHeightDetector.ExtractTrianglesFromModelItem()` - 三角形提取
   - `ChannelHeightDetector.RayTriangleIntersect()` - 射线相交测试
   - `GeometryExtractorCallback` - COM API几何回调

2. **属性管理复用**：
   - `CategoryAttributeManager.GetItemsByCategory()` - 通道识别
   - `CategoryAttributeManager.IsItemInCategory()` - 类别判断
   - `AutoPathObstacleDetector.CheckIfObstacle()` - 障碍物检测

3. **坐标系统复用**：
   - `GridMap.WorldToGrid()` / `GridToWorld()` - 坐标转换
   - `UnitsConverter.ConvertToMeters()` - 单位转换

### 架构设计原则

1. **渐进式改进**：保持现有AutoPathFinder.cs核心算法不变，只改进网格生成部分
2. **配置驱动**：通过`GridGenerationMode`参数控制使用新旧算法
3. **向后兼容**：确保现有的UI和命令系统无需修改
4. **性能可测**：每个阶段都有明确的性能提升指标

## 预期效果

- **通道投影精度提升**: 从包围盒误差→精确几何投影
- **性能优化**: 通道投影提升200-1000倍，障碍检测提升10000倍以上
- **功能增强**: 支持不同物体高度的2.5D路径规划
- **质量改进**: 避免L型、T型通道中的不必要绕行

这个方案充分利用了现有代码的几何处理、属性管理等核心功能，只需要新增网格生成的改进算法，实现成本低且风险可控。
