高效算法,B*寻路算法,python版,思维优化(2)

接着上一篇,我们继续讲解B*寻路算法,上一段的代码段,这节我们说一下方向向量,下一节我们对得到的路劲进行进一步优化,最终版的话,下面这段代码其实是没用的,根本不需要沿着障碍爬,但是基础的还是要一步步讲解的

# 返回爬墙路径 和 直线穿透障碍的第一个点,,    传入的是 当前点 {}字典信息  和 前进一步的障碍点坐标元祖  ()
#  点信息 为  {"point":(坐标),”direct“:(指向自己的向量(元祖)),其他自定义信息 }
def obstacle_path(self, cur, obstacle_point: tuple):
    # 障碍前的点
    temp_point = cur["point"]
    # 获取指向终点的向量
    direct=self.get_direct(temp_point)
    while True:
        # 传进来的点,沿着终点方向,穿透障碍,得到可以探索的第一个点     :地图内的任意两点连线都不可能穿过地图边界
        end_point = temp_point[0] + direct[0], temp_point[1] + direct[1]
        if map_be_search[end_point[0]][end_point[1]] == 0:
            break
        temp_point = end_point
    end_info = {}
    end_info["point"] = end_point
    # end_info  的direct 需要攀爬过后才能知道
    #--------穿透后的点已经好了


    # 开始爬墙,先 把障碍周围所有可走的点拿到    为obstacle_path
    obstacle_path=self.get_obstacle_path(obstacle_point)
    # ----------------第一轮 攀爬-----------
    # 这里是零时的 关闭表 ,实际上这里应该的全局关闭表
    closeSet=[]
    cur_grid = cur  # 把传进来的那个点拿来用
    while True:
        closeSet.append(cur_grid)
        # map_be_search[cur["point"][0]][cur["point"][1]] = 5
        # print(map_be_search)
        # time.sleep(0.5)

        # 当前点已经是 穿透后的点了, !!!这里终点已经加入了closeSet 后面有用 !!
        if cur_grid["point"] == end_point:
            break

        # 对当前格相邻的8格中的每一个
        neighbors = self.get_neighbors(cur_grid["point"][0], cur_grid["point"][1])
        next_point_info = {}
        for neighbor in neighbors:
            #  该邻居 在障碍周
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值