如何在无网格 2D 平面上使用 A* 寻路算法?

2023-12-21

如何在没有节点或单元的无网格 2D 平面上实现 A* 算法?我需要物体能够绕过目标途中相对较多的静态和移动障碍物。 我当前的实现是在对象周围创建八个点,并将它们视为假想的相邻正方形的中心,这些正方形可能是对象的潜在位置。然后我计算每个函数的启发式函数并选择最佳的。起点和移动点之间、移动点和目标之间的距离我用毕达哥拉斯定理按正常方式计算。问题是,通过这种方式,物体通常会忽略所有障碍物,甚至更经常会卡在两个位置之间来回移动。 我意识到 mu 的问题可能看起来多么愚蠢,但我们将不胜感激。


以适合您的问题的任何分辨率创建一个假想网格:尽可能粗粒度以获得良好的性能,但足够细粒度以找到障碍物之间的(所需的)间隙。您的网格也可能与带有障碍物对象的四叉树相关。

在网格上执行 A*。网格甚至可以预先填充有用的信息,例如接近静态障碍物。一旦你有了沿着网格方块的路径,只要路径中有拐点,就可以将该路径后处理为一系列路径点。然后沿着航路点之间的线路行驶。

顺便说一句,您不需要实际距离(参见您提到的毕达哥拉斯定理): A* 可以很好地与estimate的距离。曼哈顿距离是一个流行的选择:|dx| + |dy|。如果您的网格游戏允许对角线移动(或者网格是“假的”),只需max(|dx|, |dy|)可能就足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在无网格 2D 平面上使用 A* 寻路算法? 的相关文章

  • Unity开发2D游戏实现寻路算法——【PolyNav - 2D Pathfinding】插件的使用

    Navmesh2d插件的简单使用说明 2d游戏如何实现寻路算法NavMesh2d插件的简单使用方法创建2d导航网格添加寻路组件 简单实现寻路功能的脚本鼠标点击寻路自动路径寻路 Demo寻路效果效果gif xff1a demo插件下载 组件属
  • A* 算法:封闭列表包含太多元素/太大

    我目前正在 JavaScript 中实现 A 算法 但是 我遇到了一个问题 我的 closeList 似乎太大了 这是输出的屏幕截图 什么可能导致这个问题 我的启发式计算错误吗 Node prototype getHeuristic fun
  • 如何在网格中找到所有可能的唯一路径?

    我有一个 3 x 3 网格 其中有随机放置的障碍物 其中有一个随机起点但没有终点 当没有更多的单元格可供占用时 将创建端点 移动可以向上 向下 向左或向右 如何查看网格内所有可能的唯一路径 Example 一旦在寻找路径时使用了某个单元 就
  • 用于调整/校准启发式算法属性的软件

    今天看到有一个软件叫WinCalibra 向下滚动一点 它可以将具有属性的文本文件作为输入 然后 该程序可以根据算法的输出值优化输入属性 看这张纸或用户文档以获取更多信息 请参阅上面的链接 遗憾的是 doc 是一个压缩的 exe 您知道在
  • 如何在图中找到精确长度的路径

    我想在无向图中找到固定长度的路径 运行程序时给出 我正在使用我的图的邻接矩阵 我尝试使用一些算法 如 DFS 或 A 但它们只返回最短路径 节点无法再次访问 假设我的图有 9 个节点 最短路径是由 4 个节点构建的 我想要有额外的变量来 告
  • 如何根据二维数组上的特定位置获取网格单元的状态

    考虑一个二维网格n rows and n columns 此处为 75x75 单击鼠标即可在每个单元格中绘制符号 标记 下面的代码用于在单元格内绘制网格线和符号 class DrawCanvas extends JPanel Overrid
  • 有没有办法在 Go 项目上为导入提供可重用的路径?

    我对 Go 很陌生 需要一些帮助来使导入路径在我的团队之间更容易分配 目前 在我的一个 Go 文件的顶部 我有一个导入 例如 github teamName com teamMemberA HeartThrob c 我将他的项目分叉为我自己
  • 访问图中重复访问次数最少的所有节点

    我有一个基于图块的地图 其中几个图块是墙壁 其他图块是可步行的 可步行的瓷砖构成了我想在路径规划中使用的图表 我的问题是他们有什么好的算法可以找到访问图中每个节点的路径 从而最大限度地减少重复访问吗 例如 地图示例http img220 i
  • 寻找有界子图之间的最小割集

    如果游戏地图被划分为子图 如何最小化子图之间的边 我有一个问题 我试图通过基于网格的游戏 如 pacman 或 sokoban 进行 A 搜索 但我需要找到 外壳 外壳是什么意思 子图尽可能少切边 http en wikipedia org
  • 迭代加深 A Star (IDA*) 在 Java 中解决 n-puzzle(滑动拼图)

    我已经实现了一个能够解决这个问题的程序n 拼图问题 http en wikipedia org wiki Fifteen puzzle与 A 由于状态空间太大 我无法预编译它 我必须在运行时计算可能的状态 通过这种方式 A 对于 3 谜题来
  • 如何获取neo4j路径中的最后一个节点?

    在这个密码查询中 将返回与 STATUS on 属性有关系的节点之间的最长路径 但我还想获取路径的最后一个节点 query START n node MATCH p n rels INCLUDE gt m WHERE ALL rel IN
  • 线性冲突违反了可受理性,让我发疯

    当两个棋子tj和tk发生线性冲突时 如果tj和tk在同一行 则tj和tk的目标位置都在该行上 tj在tk的右侧 tj的目标位置在左侧tk 的目标位置 线性冲突迫使两个冲突图块相互包围 从而使它们的曼哈顿距离至少增加两步 因此 启发式函数将为
  • 寻路代码产生意外结果

    首先 请原谅这个不好的标题 但我不知道如何用一句话来描述它 给定一个包含 3 种字段的网格 空字段 墙壁和出口 我编写了一个程序来检查每个空字段 该字段是否 安全 一个人穿过那个网格 但只能非对角线行走 不能穿过墙壁 这个人从一块田地开始
  • 如果我使用 4 倍曼哈顿距离作为 15-Puzzle 的启发式,为什么 A* 会更快

    我已经实现了 A 算法来解决 15 个难题 我进行了一项研究 寻找一些可行或可接受的启发法 寻找快速解决方案 我发现使用 4 曼哈顿距离作为启发法总是可以在不到一秒的时间内解决任何 15 个谜题 我尝试过这个并且有效 我试图找到答案 但找不
  • 使用 A* JPS 进行 3D 搜索

    我该如何概括跳转点搜索 http harablog wordpress com 2011 09 07 jump point search 3D 搜索量 到目前为止 我已经定义了涉及三个运动的 3D 立方体的修剪规则 直线 0 0 1 一阶对
  • 吃豆人:眼睛是如何找到回到怪物洞的路的?

    我在 吃豆人 中发现了很多关于鬼魂人工智能的参考 但没有提到在鬼魂被吃豆人吃掉后 眼睛如何找到回到中央鬼洞的路 在我的实现中 我实现了一个简单但糟糕的解决方案 我只是在每个角落都硬编码了应该采取的方向 有更好 或最好的解决方案吗 也许是一个
  • 如何检查是否存在可能的路径?

    我正在开发一个基于 javascript 的实验性游戏 玩家必须在二维平铺地图上移动才能退出 请随意检查这个小提琴并演奏 http jsfiddle net moonlife 74vLd 我只是随机放置障碍物 但有时障碍物会挡住玩家和出口之
  • 使用 A 星查找路径的启发式函数

    I am trying to find a optimal solution for the following problem 每个节点内表示的数字表示为 x y 一个节点的相邻节点总是有一个y值为 当前节点 y 值 1 更改的成本为 1
  • 将 Eclipse 中的路径/文件名复制到剪贴板

    是否有将当前路径 文件复制到剪贴板的快捷方式 Just select the file tab and hit Ctrl C to copy file basename into clipboard Hit Alt Enter to bri
  • 是否可以证明序列是否是随机的?

    考虑以下输入 1 1 2 3 5 8 这不是随机的 2 4 8 16 32 这都不是 4 1 2 11 5 9 这个看起来像随机序列 我想问是否有这样的算法来证明输入是否是随机的 不 没有这样的证明 如果你有完全随机的数字 则每个长度为 n

随机推荐

  • 如何使用 UITableViewCell 附件复选标记取消选中所有行

    我有一个UITableView每行包含一个复选框 使用UITableViewCellAccessoryCheckmark 我不知道如何使用取消选中所有复选框didSelectRowAtIndexPath method void tableV
  • 如何通过弹出窗口获取输入并通过 javascript/jquery 将文本放入变量中

    我的页面上有一个按钮 单击时 应出现一个弹出框 允许用户输入文本 当按下 确定 提交 时 我的 jscript 将使用输入的数据执行一些功能 非常简单 但我就是不知道该怎么做 Thanks 以最简单的形式 您可以使用提示 问题 默认 摘自w
  • 使用真正的随机盐或用户名盐加胡椒进行密码哈希?

    考虑以下两种方法 hashedPassword hash trulyRandomSalt password 其中 hashedPassword 和 trueRandomSalt 存储在数据库中 hashedPassword hash app
  • 无法连接到应用程序正在侦听的 Docker 容器端口

    我想运行 Jenkins 但为了演示问题 我在 Ubuntu 15 10 中运行 netcat 服务器容器 Docker version 1 6 2 build 7c8fca2 这是我的 Dockerfile FROM ubuntu CMD
  • 使用 pandas dataframe 的内存泄漏

    我在用pandas DataFrame在多线程代码中 实际上是DataFrame called Sound 我注意到我有内存泄漏 因为我的程序的内存使用量逐渐增加超过 1000 万 最终达到计算机内存的 100 并崩溃 I used obj
  • 在 dart 中使用 source_gen 为一系列已解析文件生成一个文件

    我有一个创建迷你反射系统所需的模型列表 我分析了可序列化包并了解如何为每个文件创建一个生成的文件 但是 我找不到如何为大量文件创建一个文件 那么 如何使用 source gen 为一系列文件动态生成一个文件呢 Example Files用户
  • 使会话无效

    我有一个基于 jsp servlet 的应用程序 会话时间超过 30 分钟 我想在有人有意或无意关闭浏览器窗口时立即使会话无效 操作系统关闭 从tast管理器关闭 断电 我可以对此进行检查并使会话无效吗 无法处理这种情况 有一些浏览器提供此
  • 在 JavaScript 中将“'”替换为“”

    我的字符串是这样的 temp SE019 SR132 SC123 我使用如下函数 temp replace 但结果将是 SE019 SR132 SC123 仅删除第一个引号 我需要删除所有引号 使用正则表达式文字g 对于全局 意味着匹配al
  • 无法导入设置;不在系统路径上

    我正在尝试让 Django 使用 virtualenv 工作 我已经上线了 hello world 页面 但是 现在似乎出了问题 因为我的大多数命令都给出了有关 myProject settings 的相同错误 myenv user min
  • 如何使用 Azure 表存储选择 RowKey 范围?

    我想使用主键查询我的天蓝色表存储 另外我想检查我的 RowKey 是否在一个范围内 例如范围 02001 到 02999 有人能告诉我该怎么做吗 我了解如何用简单的方法查询 PK where fooEntiy PartitionKey pa
  • 如何在Python中配置装饰器

    我正在尝试使用 Thespian https thespianpy com doc https thespianpy com doc 一个用于演员模型的 Python 库 特别是我正在尝试使用 剧团 功能 据我了解 剧团装饰器充当调度程序
  • 合并 GitHub 帐户 - 贡献和统计数据

    我想合并我的两个 GitHub 帐户 这意味着将存储库所有权转移到一个帐户 并删除另一个帐户 根据https help github com articles transferring a repository https help git
  • 新的时间轴,如按钮行为

    在新样式的页面选项卡上 赞 按钮不再刷新页面 这打破了 Like gates 的现有工作流程 即在服务器上检查签名的请求 就像页面一样 页面刷新 繁荣 选项卡现在更新为 喜欢 状态 当用户单击新的 赞 按钮时 是否会触发任何类型的事件 或者
  • 为什么 Mongoose 不验证空文档?

    假设我有一个非常简单的模式 带有一个始终返回 false 的自定义验证函数 var MofoSchema new mongoose Schema name String MofoSchema path name validate funct
  • 60 秒后阻止操作调用超时 - 如何访问结果?

    我正在尝试调用 Apache OpenWhisk 操作 使用 JavaScript SDK 作为远程函数 我想等待函数结果可在我的应用程序中使用 这通常通过使用阻塞调用来处理 例如 ow actions invoke name blocki
  • 多语言网站 - 如何设置所需的默认语言?

    我用 joomla 多语言制作网站 塞尔维亚语和英语 我正在使用 joomla 3 3 3 和 joomla 内置对多语言的支持 但我想将塞尔维亚语设置为默认语言 因此 当用户访问我的网站时 默认情况下总是使用塞尔维亚语 怎么做 谢谢 您必
  • 将日期添加到日期对象[重复]

    这个问题在这里已经有答案了 可能的重复 如何在今天的日期上添加天数 https stackoverflow com questions 3818193 how to add number of days to todays date 我很困
  • 安装 libCurl - ruby​​ 1.9.3 ..rails 3.2.12 ..Windows

    所以 我正在尝试让 feedzirra 启动并运行 ruby 1 9 3p448 Rails 3 2 12 我去了http curl haxx se download html Win32 http curl haxx se downloa
  • 如何使用内容解析器/提供者测试类?

    我正在尝试测试查询内容解析器的类 我想用MockContentResolver并嘲笑query方法 问题是这个方法是最终的 我应该怎么办 使用模拟框架 模拟其他类 提前致谢 public class CustomClass private
  • 如何在无网格 2D 平面上使用 A* 寻路算法?

    如何在没有节点或单元的无网格 2D 平面上实现 A 算法 我需要物体能够绕过目标途中相对较多的静态和移动障碍物 我当前的实现是在对象周围创建八个点 并将它们视为假想的相邻正方形的中心 这些正方形可能是对象的潜在位置 然后我计算每个函数的启发