4

一个对象位于A并想要移动到B。我想在那里计算一个移动向量,它不会在数组 C中要避免的点的距离 D内移动。

因此,如果移动向量 (BA) 归一化并乘以对象速度将使其在 C 中任何点的 D 范围内,则该向量将旋转以使其不旋转。

这是在两个维度。此外,如果此操作有名称,请自行发表评论或编辑此问题,因为我不知道该怎么称呼它。

此外,我的第一直觉是将活动区域划分为节点并运行 A*,但我想在这个上尝试数学方法,一些植绒实验给我的印象是它可以完成。

更新(来自评论):这张图片非常接近我想要的解决方案:

小路

假设我们从左边的点开始,我们开始向右转向目标(另一点),我们检测到右边的墙,所以我们停止转动并向前移动。墙不见了,所以我们可以再次开始转向目标,依此类推。我知道这可能会导致对象根本无法到达那里,但我想定义一个行为,不一定是解决方案,如果你明白我的意思的话。

更新 2:将活动区域转换为一组节点可能效率低下。A* 和其他启发式图遍历算法非常适合低维问题。但我想穿越的区域是无限大的,只有少数障碍物散落在其中。节点本身,或者更确切地说是潜在位置,无限小。这当然可以使用某种四叉树进行优化,但我感觉简单的运动矢量以某种方式旋转和插值也可以解决这个问题。

4

4 回答 4

3

我听说这叫做运动规划和寻路(如上所述)

很多算法,但根据您的描述,可见性图可能是一个好的开始。你有一个图,其中包含点 A、B 和 C 中每个点周围的多边形(我相信,你也可以通过计算每个点的切线来用圆来做)。您将边缘计算为点之间的潜在路径。这是一个幻灯片,可以更好地解释它。

然后,在可见性图之上,应用像 A*(启发式搜索)这样的搜索算法来找到通过图的最佳路径。

但是,您应该考虑您在寻找什么。上述方法将通过非常靠近所有角落找到最短路径,但其他算法可能更适合您的最优性想法。

于 2009-07-07T14:43:22.727 回答
2

同样在您在答案中链接到的页面上,对一般的转向行为进行了很好的讨论。

特别是,请查看他的页面以获取良好示例的遏制路径跟踪

自主角色的转向行为

于 2009-07-08T21:38:23.083 回答
0

您可以考虑使用潜在领域。这提供了一种避免“拥抱边缘”障碍的方法。

但请注意,与 A* 算法一样,这需要您量化状态空间,因此根据您需要的准确度,计算量可能相当大。

于 2009-07-07T16:17:20.360 回答
0

我在这个页面上找到了一个关于植绒例程的非常详细的描述。

对所有障碍物使用分离规则,只对目标位置对齐(因为我们没有羊群伙伴)和(出于同样的原因)忽略凝聚力规则。

如果这会产生预期的效果,我会更伤心。

于 2009-07-07T16:33:44.913 回答