【问题标题】:In toroidal space, how to calculate which direction is the shortest between two points在环形空间中,如何计算两点之间哪个方向最短
【发布时间】:2015-09-04 23:40:44
【问题描述】:

基本上我正在创建一个独立玩蛇游戏的算法。 我已经设法在游戏的方格内确定了要朝哪个方向前进,但是我制作的 Snake 版本具有环形空间,即当蛇的头离开方格的一侧时,它会重新出现在对面。

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

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

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

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

【问题讨论】:

    标签: geometry coordinates


    【解决方案1】:

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

    玩家“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>coord > Goal.coord,同样处理“else”部分。现在将其扩展到二维。

    【讨论】:

    • 谢谢尼科!但是我在p.coord &gt; Goal.coord 部分放了什么?看起来你已经考虑了所有的可能性?
    猜你喜欢
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多