在环形空间中,如何计算两个点之间的最短方向

时间:2015-09-03 20:18:45

标签: geometry coordinates

基本上我正在创建一个独立玩Snake游戏的算法。 我已经设法让它在游戏的方块内向哪个方向前进,但我制作的蛇的版本有环形空间,即当蛇的头从广场的一侧脱落时,它再次出现在对面。

在此基础上,对我来说计算两点(即蛇的头部和食物块)之间的距离并不重要,而是方向食物与头部有关。

即。在50像素的网格上,当头位于[第49行,第49列]并且食物位于[1,1]时,我不希望蛇必须向上和向左移动48个方格。我宁愿它只走2个方格,2个方向。

我会用什么公式来计算哪个方向会导致头部和食物之间的最短旅行时间?

PS请告诉我是否应该在另一个Stack Exchange网站上发布此内容,我会这样做。

1 个答案:

答案 0 :(得分:0)

考虑一维情况可能更容易。基本上是一个循环缓冲区,见图:

1-d representation of game

你的玩家“P”位于第3位,你的“目标”位于第9位,总游戏空间宽度= 10.然后可以通过以下方式给出朝向目标的最短运动方向:

if(P.coord < Goal.coord)
{
  int dist1 = Goal.coord - P.coord;
  int dist2 = (Width - Goal.coord) + P.coord;
  if(dist1 < dist2) 
  {
    //move forwards
  }
  else
  {
    //move backwards
  }
}
else
{
  int dist1 = P.coord - Goal.coord;
  int dist2 = (Width - P.coord) + Goal.coord;
  if(dist1 < dist2)
  {
    //move backwards
  }
  else
  {
    //move forwards
  }
}

如果p&gt; coord&gt;同样处理'else'部分。 Goal.coord。现在将它扩展到2维。