前文:

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. 基于 Easysearch kNN 搭建即时图片搜索服务

    环境准备 启动 Easysearch 服务: # Make sure your vm.max_map_count meets the requirement sudo sysctl -w vm.max ...

  2. 腾讯云 BI 数据分析与可视化的快速入门指南

    前言 腾讯云 BI 是一款商业智能解决方案,提供数据接入.分析.可视化.门户搭建和权限管理等全流程服务.它支持敏捷自助设计,简化报表制作,并通过企业微信等渠道实现协作.产品分为个人版.基础版.专业版和 ...

  3. 微信和支付宝异步回调通知IP白名单

    附一:微信支付回调通知出口IP列表 商户侧对商户回调通知功能开通白名单网段: 上海电信出口网段:101.226.103.0/25 上海联通出口网段:140.207.54.0/25 上海CAP出口网段: ...

  4. idea编译报错 sun.misc.BASE64Decoder升级处理

    idea编译报错 sun.misc.BASE64Decoder升级处理 警告:17:01:15 /deploy/jenkins/workspace/auto-java-test/utils/Image ...

  5. 欢迎 Stable Diffusion 3 加入 🧨 Diffusers

    作为 Stability AI 的 Stable Diffusion 家族最新的模型,Stable Diffusion 3 (SD3) 现已登陆 Hugging Face Hub,并且可用在 Diff ...

  6. InvalidOperationException Cannot modify ServiceCollection after application is built .Net6 异常

    背景 我用了一个叫Unchase.Swashbuckle.AspNetCore.Extensions的库来加强Swagger的文档,我一般写法是这样的: builder.Services.AddSwa ...

  7. 阿里云ECS主机自建SNAT,实现没有公网的主机通过有公网的主机访问外网

    目的: SNAT:实现没有公网IP的ECS实例借助有公网的ECS访问外网 实现前提: 有公网的主机与没有公网的主机必须处在同一个VPC安全组(确保两个主机互通才可以) 全程都在有公网的主机上操作 开启 ...

  8. UICollectionView滑动流畅性优化

    UICollectionView滑动流畅性优化 前言 初始的collection view在滑动时都是十分流畅的,然而因为collection view cell 加载更多的内容时因为主线程耗用太多性 ...

  9. 多核处理器与MP架构

    多核处理器也称片上多核处理器(Chip Multi-Processor,CMP). 多核处理器的流行 多核出现前,商业化处理器都致力于单核处理器的发展,其性能已经发挥到极致,仅仅提高单核芯片的速度会产 ...

  10. Ubuntu下的NVIDIA显卡【安装与卸载、CUDA安装】

    @ 目录 0. 显卡GPU的基础知识 1. 显卡安装 Optional: 卸载显卡(当你要换显卡的时候) 2. 安装CUDA 碎碎念:主要是把显卡相关的整合出来,基础知识后面再放上来 显卡安装后可以有 ...