接下来我们对 路径进行优化

椭圆属性,圆上的每个点到 a、b 两点的距离都是一样的,我们选择爬过障碍的最短路径,计算每个点到 起点和穿透点的距离之和 ,最大说明该障碍点 离两个点最远,也就是绕过障碍的最佳点。
其实就是算是爬过障碍的一个判定点,但不全是因为可能有 多个点是一样的,只要不是这种包围型的,好像都只有一个。但是没关系。我们取第一个就好了
注:这里 B点是穿透点或者终点,我觉得是一样的效果,不过实际处理是固定为终点不变,A点初始是起点,需要不断更新为最新的最远距离点,因为从起点到第一个最远距离点的最短路径已经可以计算出来了, 接下来我们就把这个点作为起点 走向终点,
# 下图只是做个简单示范

这里是 0 j 42 end 点,只要用A*算法去优化这些点之间的路劲就是最短路径了,上上面的图不算, 看着怪怪的,原来是画错了,椭圆上点到两固定点之间的距离之和 大于两固定点之间的距离,就是竖着扁扁的,小于就是横着扁扁的,
那么我们最后只产出 起点、 最远距离点1,最远距离点2.。。。。终点。再用A*寻路算法优化这几个点之间的距离,就是最短距离。
也就是说B*寻路算法 只需要产生这些点就算完成了任务,,,至于路劲啥的,不管。
那么我们在计算 攀爬障碍时,就计算一下每个点到起点或者上一个穿透点的距离之和就行了,但是我们不会去计算。
我们在计算 这个path时,是不是连着障碍的最外圈 也计算了,因为我们 从第一个障碍点开始计算了障碍物周围最外一圈 的障碍点 加入 openset >> closeSet (临时)。 外圈可走点加入了 path.
所以 我们可以通过 两种方式 计算最远点,,,一个是计算 closeSet, 另一个是计算path.
好了这下 连障碍都懒得爬了,直接找最远点就行了。

#障碍内圈的是 起码大于2 格子组成,不过用线性规划就可以解决任意类型的障碍,实际应用是应该没有这种单格障碍。。。。。。。哈哈哈,不然只能外圈走,内圈两头都是死路
这里特别 需要注意的是,计算外圈可走点 path是可以 判定到了达穿透点或者死路,从而中断,变成两段路径(可用和不可用通过是否到达穿透点),最后我们从所有完整到达穿透点的有效路径中取出 路径最小中的最远点
对于内圈(障碍物最外圈)不可走。也是同样两条分支路走,而且还就是分别朝着两个方向的起点走(这里在前面的代码有体现),这里内圈不太好判定,沿着边缘障碍点走,如果前面的地图边界,那么我们就放弃该路径,从起点的另一个分支走,但是这个分支一直走(假设不在地图边缘,也就是说我们会一直走一圈 走到原点。再从所走路径中取最远点。)好像也行,但是考虑到没有判定点,不能确定最远点是不是在有效路径里面。
所以这里我们干脆加入一个穿透点的 前一个障碍点作为判定不就好了。这样内外圈就是一样的了
我们找到障碍内圈最远的距离点,它周围八个点中所以 ==0的可走点,算一下距离就可以了。
992

被折叠的 条评论
为什么被折叠?



