对象位于 A ,并希望移至 B 。我想计算一个不在数组C 中待避免点的距离D 内移动的运动矢量。
因此,如果移动矢量(B-A)归一化并与物体速度相乘,则会将其带入C中任意点的D内,旋转矢量使其不会旋转。
这是二维的。此外,如果此操作有名称,请自行发表评论或编辑此问题,因为我不知道该怎么称呼它。
另外,我的第一直觉是将活动区域划分为节点并运行A *但是我想在这个上尝试数学方法,一些植绒实验给我的印象是它可以完成。
更新(来自评论):此图片非常接近我想要的解决方案:
假设我们从左侧开始,我们开始向右转向目标(另一个点),我们在右侧检测到一堵墙,因此我们停止转弯并向前移动。墙已经消失,所以我们可以再次开始转向目标,依此类推。我知道这可能导致对象根本无法到达那里,但我想定义行为,不一定是解决方案,如果你知道我的意思。
Update2 :将活动区域转换为一组节点可能效率低下。 A *和其他启发式图遍历算法对于低维问题非常有用。但是我想要移动的区域是无限大的,只有一些障碍物散布在它上面。节点本身,或者更确切地说是潜在的位置,是无限小的。这当然可以用某种四叉树进行优化,但我感觉简单的运动矢量以某种方式旋转和插值也可以解决这个问题。
答案 0 :(得分:3)
我听到这个名为motion planning和寻路(如上所述)
算法有很多,但根据您的说明,visibility graph可能是一个好的开始。你有一个图表,在C的每个点周围都有点A,B和多边形(你也可以通过计算每个点的切线来做圆圈,我相信)。您将边缘计算为点之间的潜在路径。这是一个slide show,可以更好地解释它。
然后,在可见性图表的顶部,应用像A *这样的搜索算法(启发式搜索)来找到图表中最佳的路径。
但是,你应该考虑你在寻找什么。上述方法将通过非常接近所有角落找到最短路径,但其他算法可能更符合您的最优性。
答案 1 :(得分:2)
同样在page you linked to in your answer上对一般的转向行为进行了很好的讨论。
特别是,请查看containment和path following的网页,以获取良好示例。
答案 2 :(得分:0)
您可以考虑使用potential fields。这提供了一种避免障碍物“拥抱边缘”的方法。
但请注意,与A *算法一样,这需要您量化状态空间,因此可能需要相当大的计算量,具体取决于您需要多少准确度。
答案 3 :(得分:0)