A *以最小转弯半径search六边形网格

我需要运行一个六边形网格A *search。 但是,我有一个讨厌的约束:我的车辆只能变得如此尖锐。 它有一个特定的最小转弯半径。 我不太明白如何将这个约束转换成我可以用于每个单元扩展来确定一个邻居是否可行的东西。 我的网格单元显着小于最小转弯半径。

我有一个初始角度和车辆的位置; 似乎我需要保持与每个细胞目前的角度。 考虑到这一点,我不太清楚何时需要重置参考点。 看来我不能这样做,否则我只会走直线。

我可以把这个转折半径翻译成一个多边形(有几百个边),每一边的长度就是我的网格单元之间的距离。 不过,我不确定如何使用这个。

思考? 谢谢你的时间。

我们来考虑一个通用的转弯半径约束。
它必须包括在允许60度转弯之前移动“N”个直线。

这可以被合并:

  • 用计数器扩展path节点的定义: StraightLineHexesRequired
  • 如果EntryDirection == ExitDirection和StraightLineHexesRequired > 0,则减lessStraightLineHexes在每个节点上的扩展
  • 如果StraightLineHexesRequired != 0,那么只能扩展hex
  • 如果StraightLineHexesRequired == 0,那么只展开节点前进的节点,以及两个60度的节点。
  • 设置StraightLineHexes需要N在60度的每一个回合。

这很好地概括为N可能为0的情况。

更新:
在时间优化的情况下,速度是一个可变的参数,而N取决于速度,可以将节点添加到当前速度的开放集合,以及速度范围的正一和负一适当的StraightLineHexesRequired的新值