首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助修改现有的A*算法以在特定场景中不允许对角线移动

需要帮助修改现有的A*算法以在特定场景中不允许对角线移动
EN

Stack Overflow用户
提问于 2022-09-01 07:05:15
回答 1查看 86关注 0票数 0

我目前正在使用古斯塔沃·佛朗哥( Gustavo )在2006年编写的这个路径查找算法在GitHub上找到的 (特别是PathFinderFast.cs)。它速度太快了,效果也很棒。唯一的问题是,当路径在两个障碍物之间斜行时,我需要不允许对角线移动(见图)。

在这种情况下,这条路应该被认为是被阻碍的,但是沿障碍物的正常对角线移动,或者在开阔的区域内仍然允许。

有一个字段"mDiagonals“在启用时,将"mDirection”检查从四路更改为八路。我试过玩弄这些东西,但没有成功。

下面是作者本人对代码工作方式的详细解释

更糟的是,我最终会写我自己的A*,但是当前的实现是如此疯狂的优化和易于使用,我不得不这样做是很遗憾的。如果有人能告诉我如何修改现有的代码,我将永远感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-01 11:14:15

看起来,如果在以下几行之后:

代码语言:javascript
复制
    if (mGrid[mNewLocationX, mNewLocationY] == 0)
        continue;

你再加上

代码语言:javascript
复制
    if (i > 3 && mGrid[mLocationX, mNewLocationY] == 0 && mGrid[mNewLocationX, mLocationY] == 0)
        continue;

应该是你所需要的。它只检查新行和旧列中的单元格,然后检查旧行和新列中的单元格,这是在对角线上阻塞的两个单元格,如果它们都被阻塞,则不计算单元格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73565391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档