0

给定一个可以在给定 X,Y 点向前、向后、向左和向右移动的对象。如何使用给定的运动机制以最有效和最人性化的方式有效地将对象引导到 X、Y 点。

对象可以实时移动,你可以告诉他们“startMoving|Direction|()”和“stopMoving|Direction|()”。虽然作为一个额外的转折和我遇到的问题,对象的朝向是永远未知的,只有它的当前位置是已知的,所以算法必须“检测”方向。对象的位置以 500-1 秒的间隔在单独的线程中更新。可以在任何时候提出更新算法内位置的“请求”,但它不是立即可用的,算法必须考虑到这一点。执行 requestAndWaitForCoordUpdate() 之类的操作是完全可以接受的,但可能不需要。

此外,没有障碍物出现,可以假设您在一个非常开放的平面上,偏离路径之间的直线距离很远,您可能会遇到障碍物。可以安全地假设,在给定的直接路径上,目标和源之间距离的 1/4 的宽度应该是可用的。

我还要提一下,我不确定 A* 是否适用于这种情况,如果确实如此,我不确定如何在给定约束的情况下实现它。这里唯一真正的变量是对象的朝向。

这是一些示例代码:

public int[] currentCoords;
public void movement() {
  currentCoords[0] = 1005; // starting y coord
  currentCoords[1] = 1007; // starting x coord
  moveTo(1050, 1025);
}

public void moveTo(int x, int y) {
  ... how?
}

public void threadUpdatingCoords() {
   ... periodically check for source coord updates
   ... between 200ms and 1000ms apart.
}
4

1 回答 1

1

要计算最佳路线,您应该使用 A* 算法。但是,要以最人性化的方式进行操作,您只需让它行走并随机选择方向即可。除非它是一个聪明的人,否则他只会将右手贴在墙上并继续前进而不会失去联系:最终你会到达你的目的地。

人类没有效率,它是随机的。A* 不是随机的,它是有效的。

于 2011-03-21T21:19:14.440 回答