前文:

A* 算法、PathFinding问题中的 allow diagonal 和 don't cross corners,以及 .map文件格式

上篇讲了些关于地图文件 .map 的介绍,本文主要讲下PathFindding中的allow diagonal 和 don't cross corners。



在PathFinding问题中每个点都是一个坐标点,在地图中大致形式如下:

但是在实际地图显示中是不会以点的显示来形式的,地图上每一个坐标点都是用一个小方块来进行表示的,一个完整的地图(带有坐标点的形式)如下:

也就是说每个坐标点是(x, y)的形式,但是在图形显示的时候是使用一个方块的形式,在实际计算的时候我们依然使用坐标点(x, y)的形式,方块只是用于可视化形式,一个坐标点和其具体的显示形式如下:

关于 allow diagonal :

顾名思义,这个选项代表是否可以用对角线的形式连接坐标点,下面给出一个不使用对角线连接的一个路径图示意:

可以看到坐标点之间的连接都是横向和纵向的,没有对角线方向的。

如果使用对角线连接的方式,示意图如下:

重点在于下面的这个对角结构:

假设坐标点之间的间距为1,那么方块的长宽也为1,如果不允许对角线连接的情况下坐标点之间的连接长度只能为1,但是如果允许对角线连接那么相邻坐标点之间的连接距离可以为1也可以为\(\sqrt{2}\)

关于don't cross corners :

在论文:https://webdocs.cs.ualberta.ca/~nathanst/papers/benchmarks.pdf

中可以知道,在允许对角线连接的情况下( allow diagonal ),如果don't cross corners对角线两侧的坐标均不能被占用(不能有障碍物,必须是可穿越的)

下面这个对角线是可以穿越的(allow diagonal 并且 don't cross corners):

但是,如果对角线两侧有障碍物则不能对角线连接,如:

(下面三种形式在allow diagonal 并且 don't cross corners情况下是违法的,是不允许存在的)

(1)

(2)

(3)(这种情况不论是否 allow diagonal 也不论是否 don't cross corners 均是违法的)

也就是说在don't cross corners情况下,即使allow diagonal,那么在上面的三种情况不能进行对角线连接。

在don't cross corners情况下,如果allow diagonal,那么上面的三种情况只能像下面这样处理:

为了更形象的说明在don't cross corners情况下,allow diagonal是不能在相邻坐标点的连接对角线两侧有不可穿越点的,给出下面的App应用的演示:

App地址:https://qiao.github.io/PathFinding.js/visual/

例子:(允许cross corners)

重点在:

上面的情况,如果 allow diagonal 并且 don't cross corners,则有:

A* 算法、PathFinding问题中的 allow diagonal 和 don't cross corners,以及 .map文件格式(续)的更多相关文章

  1. 任意半径局部直方图类算法在PC中快速实现的框架。

    在图像处理中,局部算法一般来说,在很大程度上会获得比全局算法更为好的效果,因为他考虑到了图像领域像素的信息,而很多局部算法可以借助于直方图获得加速.同时,一些常规的算法,比如中值滤波.最大值滤波.最小 ...

  2. 06 - 从Algorithm 算法派生类中删除ExecuteInformation() 和ExecuteData() VTK 6.0 迁移

    在先前的vtk中,如vtkPointSetAlgorithm 等算法派生类中定义了虚方法:ExecuteInformation() 和 ExecuteData().这些方法的定义是为了平稳的从VTK4 ...

  3. 1145: 零起点学算法52——数组中删数II

    1145: 零起点学算法52--数组中删数II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 293 ...

  4. KMP算法 --- 在文本中寻找目标字符串

    KMP算法 --- 在文本中寻找目标字符串 很多时候,为了在大文本中寻找到自己需要的内容,往往需要搜索关键字.这其中就牵涉到字符串匹配的算法,通过接受文本和关键词参数来返回关键词在文本出现的位置.一般 ...

  5. 剑指Offer——算法复杂度中的O(logN)底数是多少

    剑指Offer--算法复杂度中的O(logN)底数是多少 前言 无论是计算机算法概论.还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多 ...

  6. AES加解密算法在Android中的应用及Android4.2以上版本调用问题

     from://http://blog.csdn.net/xinzheng_wang/article/details/9159969 AES加解密算法在Android中的应用及Android4.2以上 ...

  7. tarjan算法-解决有向图中求强连通分量的利器

    小引 看到这个名词-tarjan,大家首先想到的肯定是又是一个以外国人名字命名的算法.说实话真的是很佩服那些算法大牛们,佩服得简直是五体投地啊.今天就遇到一道与求解有向图中强连通分量的问题,我的思路就 ...

  8. 利用“海底捞算法”在MongoDB中优雅地存储一棵树

    目前常见的树形结构数据库存储方案有以下四种,但是在处理无限深度.海量数据的树结构时,都存在一些问题: 1)Adjacency List(邻接表):每个节点仅记录父节点主键.优点是简单,缺点是访问子树需 ...

  9. 图像处理之优化---任意半径局部直方图类算法在PC中快速实现的框架

    在图像处理中,局部算法一般来说,在很大程度上会获得比全局算法更为好的效果,因为他考虑到了图像领域像素的信息,而很多局部算法可以借助于直方图获得加速.同时,一些常规的算法,比如中值滤波.最大值滤波.最小 ...

  10. 正整数构成的线性表存放在单链表中,编写算法将表中的所有的奇数删除。(C语言)

    /* 正整数构成的线性表存放在单链表中,编写算法将表中的所有的奇数删除 */ #include <stdio.h> #include <stdlib.h> typedef st ...

随机推荐

  1. redis实战技巧

    1.分析key大小 [root@db-51 ~]#redis-cli -h 10.0.0.51 -p 6380 --bigkeys # Scanning the entire keyspace to ...

  2. Scrapy框架(十)--增量式爬虫

    增量式爬虫 - 概念:监测网站数据更新的情况,只会爬取网站最新更新出来的数据. - 分析: - 指定一个起始url - 基于CrawlSpider获取其他页码链接 - 基于Rule将其他页码链接进行请 ...

  3. Java 获取当前时间的年、月、日、小时、分钟、秒数

    public static void getDateTime() throws ParseException{ Calendar now = Calendar.getInstance(); Syste ...

  4. Lecture3

    Smiling & Weeping ---- 蝴蝶在双翼里藏匿夏的脉络 妄图在绿意中品鉴隆冬 第三章 Git分支管理 3.1 分支的简介 Git最重要的运用场景是多人协同开发,但是如何能保证每 ...

  5. opencv在MAC下的安装

    版本信息 MAC版本:10.10.5 Xcode版本:7.2 openCV版本:2.4.13 安装步骤: 联网 安装brew,在终端输入指令 /usr/bin/ruby -e "$(curl ...

  6. Bike Sharing Analysis(二)- 假设检验方法

    假设检验 假设检验是推论统计学(inferential statistics)的一个分支,也就是对一个较小的.有代表性的数据组(例如样本集合)进行分析与评估,并依此推断出一个大型的数据组(例如人口)的 ...

  7. Linux 内核:设备树(3)把device_node转换成platfrom_device

    Linux 内核:设备树(3)把device_node转换成platfrom_device 背景 在上一节中讲到设备树dtb文件中的各个节点转换成device_node的过程(<dtb转换成de ...

  8. C语言:if(0)之后的语句真的不会执行吗?

    C语言--if(0)之后的语句真的不会执行吗? 原文(有删改):https://www.cnblogs.com/CodeWorkerLiMing/p/14726960.html 前言 学过c语言的都知 ...

  9. CF187D 题解

    模拟考最后一题是这道题,要是数组开大就场切了,最后不小心挂了 \(15\) 分. 以下是考场思路: 考虑这样一个问题,所有时间对 \(r+g\) 取余是可以的.毕竟红绿灯是一个循环. 再考虑这样一个东 ...

  10. VulnHub_DC-2渗透流程

    VulnHub_DC-2 信息收集 探测目标主机IP地址 arp-scan -l nmap -sV -A -p- 192.168.157.143 得知开启80端口的http服务与7744端口开启的ss ...