【问题标题】:Finding next position in 'circular' array在“圆形”数组中查找下一个位置
【发布时间】:2017-12-29 13:01:31
【问题描述】:

我有一个由 8 个罗盘点组成的数组,编号从 SW,顺时针到 S:

2 3 4
1   5
0 7 6

我想计算从一个点到另一个点的最短路线是顺时针 (+1) 还是逆时针 (-1)。例如。从 7 到 5 是 -1,从 7 到 0 是 + 1。

我猜是个简单的问题,但我今天真的是脑筋急转弯。

我得到的最接近的是if abs(start - end) < 4, -1, 1,但如果开始是 3,那将不起作用。

有一个类似的问题here,接受的答案是使用模数,但没有解释如何。我进行了各种计算,但都没有成功。

【问题讨论】:

  • 7 到 5 会是 -2,不是吗?
  • @Magnetron Yes :) 但我只是在相对方向之后,积极或消极。
  • 哦,我知道了

标签: c# arrays unity3d math unity5


【解决方案1】:

不使用abs,而是添加8(条目数),然后取模8,如下所示:

enum Direction {
     None, Clockwise, Counterclockwise
}

public static Direction GetDirection(int a, int b) {
    if (a == b) {
        return Direction.None;
    }
    return (a-b+8)%8 > 4 ? Direction.Clockwise : Direction.Counterclockwise;
}

添加8 使差异为非负数; modulo-8 将其带入 0...7 范围。

注意当步数为4时,走哪条路都没有关系,所以程序更喜欢逆时针。您可以使用>= 代替> 来更改它。

【讨论】:

    【解决方案2】:

    试试这个

    int start=3;
    int end=6;
    
    var temp = start-end;
    temp= temp < 0 ? temp + 7 : temp;
    
    var result = temp < 4 ? -1 : 1;
    

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多