Closed. This question needs to be more focused. It is not currently accepting answers. Learn more
想改进这个问题吗?更新问题,使其只关注一个问题editing this post
我正在寻找一种有效的方法来检查一个物体是否会从A点切角到B点,或者如果物体之间有一个对角线不可接近的位置,则防止物体从A点移动到B点。
已知情况:
每个点都是宽度和高度的平方1
每个点都有8个相邻点的列表
点可以是可行走的或不可行走的
下面是一些例子(a是来源,b是目的地,X是不可接近的点):

aX
 b

在上述情况下,a无法行走,因为在点a和点b附近都有一个不可行走的点。因此,在当前情况下,ba变为不可行走(即,a必须向下移动才能继续b
以下是一个类似的情况,即a无法步行到b
aX
Xb

我现在做的方法是得到点A和点B的正交相邻点集,并将这两个点集相交如果相交结果中没有元素,则点A可以移动到点B
…而且很有效。
但是,有没有一种,也许,更数学和更有效的方法来实现这一点呢?

最佳答案

我假设你只对b是a'a邻居的情况感兴趣,然后只对对角相邻的情况感兴趣那就是

if ((abs(a.x - b.x) == 1) && (abs(a.y - b.y) == 1))

在这种情况下,我们只需要检查两个点相邻的两个点。
if ((abs(a.x - b.x) == 1) && (abs(a.y - b.y) == 1)) {
   if (blocked(a.x, b.y) || blocked(b.x, a.y)) {
      // unwalkable
   } else {
      // walkable
   }
}

当然可以合并if语句。

关于algorithm - 确定点A是否需要拐弯才能到达点B ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3439313/

10-12 18:36