具有障碍物和角度限制的环形网格表面上的线性路径

Linear path on a toriodal grid surface with obstacles and angle limitations

我有一个网格。如果有东西离开了一个边缘,它会重新出现在另一侧,就像在环面的粘合图上一样。网格上有两个任意点我想在使用算法之间找到一条直线。该线必须完全避免穿过任何障碍方块。它还必须在与 x 轴的指定角度范围内。它应该 return 它找到的线性路径的斜率。起始位置已知,因此只需要斜率。如果不存在这样的路径,则该算法必须 return 一些异常数据值,指示缺少可能的路径。它也应该比搜索程序能够处理的所有角度更好。我如何制作这个算法?我试过只搜索程序能够处理的所有角度并延长线直到它碰到某物或达到某个最大长度,但这是相当低效的,我真的不希望有最大长度。找到的路径不一定是最短路径。它只需要是一条线性路径,与 x 轴有一定的角度范围,并且不会撞到任何障碍物方块。

这张图片可能有帮助

绿色为起点,红色为目标,棕色方块为障碍物,灰色区域为被障碍物遮挡的区域。

注意只有一个目标和一个障碍物。重复目标和障碍物以显示当您离开网格的右边缘并返回到左边缘时会发生什么。

你可以看到,每绕一圈线,与目标的角度和与障碍物的角度都会减小。最终,障碍物开始隐藏自己。超过那个点,就没有希望达到目标。所以在这个例子中,恰好有两个角度到达目标。


再加一个障碍物(紫色),所有角度都被挡得更快

如果障碍物与目标处于同一高度,则需要更长的时间才能阻挡所有可能的角度。但最终障碍物会遮蔽自己,所有超出该点的目标角度都被阻挡。

为了完整起见,可以忽略目标上方的障碍物。到目标的角度总是小于到障碍物的角度。