# 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 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型通道中的不必要绕行 这个方案充分利用了现有代码的几何处理、属性管理等核心功能,只需要新增网格生成的改进算法,实现成本低且风险可控。