之前的AStar算法学习笔记博客 提到了大神的基于AStar算法的RCP布线算法 但是大神给的开源码 还有存在可以优化的部分 这个博客主要是记录自己优化的过程
大神源码链接:RCP:gef智能寻路算法(A star)
我的AStar的算法学习:AStar算法学习笔记
改进与优化
1. 关于终点出现斜线问题
分析:由于坐标是以起始点作为坐标原点的,所以终点极大可能不在有整数坐标的点位上,找不到路径 就会出现斜线直连
解决:大神已经给出了解决的代码:算法:Astar寻路算法改进
我补充下这段代码添加的位置:route() 方法最后获取到路径并放到最终存储路径信息的points过程中, 将最后的几个点进行处理 即:添加points.addPoint(endPoint)之前。当然我更建议将对通过算法获得的路径进行额外的处理的部分封装到独立的函数中,因为处理终点斜线问题只是很多中的一个。
private void pathExtraControl(PointList points, Point endPoint)
{
// 对于终点没有在方格上 出现斜线的处理
int size = points.size();
if (size < 3)
return;
points.removePoint(size - 1);
Point pointN1 = points.getLastPoint();
Point pointN2 = points.getPoint(size - 3);
if (pointN2.x == pointN1.x)
{
points.setPoint(new Point(pointN1.x, endPoint.y), size - 2);
} else if (pointN2.y == pointN1.y)
{
points.setPoint(new Point(endPoint.x, pointN1.y), size - 2);
}
}
2.部分线可以经过一些图源
分析:在预读取为每个点设置难易度时存在问题
源码自带了标记openList 和 closeList的方法:test() 我也仿写方法标记预读难度的pool池的方法。
PoolHandler类: