原地址:

https://alexene.dev/2019/06/02/Hierarchical-pathfinding.html

讲解视频:

https://www.youtube.com/watch?v=qSbSb8vMbLI



目标问题:

为不同的分割区建立door,也就是两个分割器有两个相邻的小格,这两个小格子是可以联通的,下图中指的是在黄色线两侧的相邻的两个蓝色小格子。

在每个划分后的格子里面(黄色线割出的大格子)设置好蓝色的door后,为大格子内的所有蓝色小格子建立连接,并得到彼此之间的连接路径的长度。注意,往往我们会在一个大格子的边缘上选几个点,而这里是将所有的边上的点(没有阻碍的点,不包括黑点)都设置为可以联通的点,比如一个10 * 10的大格子,我们一个边上有10个点,但是我们实际中并不会设置10个door,而是在这10个中选择几个,如三个点作为door。

在大格子中,10 * 10 的格子中,我们也是使用A* 算法建立出边缘点之间的连接路径的,因此如果边缘点上选择过多的作为door就会导致在为大格子计算内部路径时耗费过多的计算资源,因此我们可以选择大格子边缘上的几个点作为door。

我们知道了在大格子内部为边缘上的door建立路径,这时候使用的是A* 算法,我们需要把这个结果进行保存,在大格子之间进行寻路时依然使用A* 算法,这时我们选择哪个大格子作为下一步时是只选取之前保存的路径数值的。

Getting a path

Now that we have our high-level cells and they have connections between them and internal connections we just need to explore two things when we are searching for a path.

  1. From the starting point find all possible high-level connections that we can start from
  2. Traverse the high-level graph until we reach the high-level cell containing the destination.
  3. Once we reached that end high-level cell, do a low-level A* to find if from the entry point we have a path to the destination.

As our entity moves through the world it will encounter a cell that’s connected to another far away cell. This is for the case where we need to traverse a high-level cell. In that case we have to call A* pathfinding again for that high-level cell.

It is also possible to cache the path and just querry it as it saves us a A* search for a 10x10 cell. This is what I do and if you have spare memory to cache these paths I highly recommend doing so.

For example a path from the start point S to the destination D will look like this:

  • The orange cells are part of low-level paths.
  • The red cells are connected in the high-level pathfinding grid. For them we either have low-level paths cached or we compute them as needed. When we reach the first cell touched by that red arrow.

HPA* (Near Optimal hierarchical Path-finding) —— 外网的讲解blog的更多相关文章

  1. mysql 设置服务器的MySQL允许远程访问/外网访问

    设置服务器的MySQL允许远程访问/外网访问 https://blog.csdn.net/weixin_34232363/article/details/85889037

  2. 服务器发布tomcat的WEB项目供外网访问

    1.首先你要确定你有一个外网ip地址.如果你分配到的是一个局域网IP地址需要经过一系列的转换为外网ip地址,然后继续下面操作. 2.拿到外网IP地址,进行tomcat的server.xml文件的配置. ...

  3. 【转】CentOS5.6下配置rsync内网同步数据到外网

    [转]CentOS5.6下配置rsync内网同步数据到外网 本文转自:http://www.linuxidc.com/Linux/2012-06/64070.htm 一.需求 卫士那边有一个需求,就是 ...

  4. ngrok访问外网

    1. 外网映射工具介绍 windows用户: 1,下载windows版本的客户端,解压到你喜欢的目录2,在命令行下进入到path/to/windows_386/下3,执行 ngrok -config= ...

  5. 如何在自己的Windows系统上 架设服务器并开发网站,然后连入外网供外界访问?(JDK+Tomcat+花生壳)

    <目前百度谷歌上都木有我这么完整的笔记,虽然各个部分都是来自百度的,然后自己实践,自己做截图笔记,嘻嘻 Made By HeYang> 环境:Windows 7 工具:JDK,Apache ...

  6. 外网访问自己的tomcat

    我们平常学习时经常会写一下javaweb程序,我们为了更能逼近现实,就想着自己的javaweb程序发布后,外网的同学能够访问我们的网站,难道我们去买空间,去买域名嘛,其实也没必要,我们只是学习,测试之 ...

  7. 【转】使用miniupnpd-->upnp协议 映射本地端口到外网

    miniupnpc的主要函数介绍 1>.miniupnpc库主要使用的头文件有 #include"miniwget.h" #include"miniupnpc.h& ...

  8. 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问

    1.首先你要确定你有一个外网ip地址.如果你分配到的是一个局域网IP地址需要经过一系列的转换为外网ip地址,然后继续下面操作. 2.拿到外网IP地址,进行tomcat的server.xml文件的配置. ...

  9. 外网如何访问本地tomcat web服务器【转】

    转自:http://jingpin.jikexueyuan.com/article/49159.html 外网如何访问本地tomcat web服务器 作者: XHKJOE 发布时间:2015-07-1 ...

  10. Tomcat禁止外网访问

    Tomcat中某个应用禁止外网访问 Tomcat中有多个应用,由于权限需要,将某一个主机禁止外网访问.在config/server.xml中设置: <Host name="172.16 ...

随机推荐

  1. 物理机安装Centos系统

    引言 在工作中,经常会在本地搭建开发环境,而使用的基本都是Linux系统,本文就教大家如何安装一套Centos Linux系统 准备 1.系统选择 系统:Centos 版本:7.9 2.镜像下载 下载 ...

  2. url编码和解码分析URLEncoder.encode和URLDecoder.decode

    url编码和解码分析 1.Get请求会将参数做默认的url解码操作,接口接收到的值是Get解码后的值.2.可以将Get操作修改成Post操作,这样不会url解码.可以在接口中做url解码.3.在多次传 ...

  3. 随机二次元图片API第三弹

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 随机二次元图片API第三弹 日期:2020-3-10 阿珏 ...

  4. python中globals()的用法

    python中globals()的用法 1. 获取所有的全局变量, 获取到的内容如下: {'__name__': '__main__', '__doc__': None, '__package__': ...

  5. Linux内核:通知链 机制

    Linux内核:通知链 机制 背景 在驱动分析中经常看到fb_notifier_callback,现在趁有空学习一下. 参考: https://www.cnblogs.com/armlinux/arc ...

  6. C#/.NET/.NET Core编程技巧练习集(学习,实践干货)

    DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法.算法.技巧.中间件.类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.N ...

  7. 中间件-Nginx

    一.nginx反向代理 输入 http://xxx.com/plat/login 跳转: http://localhost:8383/plat/login 将某个指定的域名代理到指定的服务 http: ...

  8. 200 行 ,一个PYQT 窗口 + 后台 AIOHTTP 服务 , 例子

    直接上代码 import sys from typing import Dict, List from aiohttp import web import asyncio from functools ...

  9. Notepad++ 搭建简单Java编译运行环境

    简介 有时候使用Eclips进行Java相关方法的测试和验证太繁琐,经过查询实践,使用了Notepad++和JDK搭建了一个简单的编译运行环境. 搭建过程 在电脑上安装Java环境(网上教程很多,此过 ...

  10. python实用总结

    Python3 常用工具 1. 命令行快速搭建本地http服务器 python3 -m http.server 8000 在命令行中输入此命令,就会在当前目录下搭建http服务器,可以通过访问http ...