数组数组之间的距离

时间:2017-03-05 20:53:15

标签: c# arrays algorithm matrix multidimensional-array

我有以下情况:

counter

也就是说,它起象棋场的作用,我有几个城市的对象世界,每个城市都有许多插槽。每个城市的老虎机都安排在一个网格中,每个城市的网格都有相同的行数和列数。

通过这种方法,我可以获得同一城市的老虎机之间的距离:

public class World{
  public City[,] cities { get; set; }
}


public class City
{
    public int number_city { get; set; }        
    public int x { get; set; }
    public int y { get; set; }
    public World world { get; set; }
    public Slot[,] slots { get; set; }
}

public class Slot
{
    public City city { get; set; }

    public int x { get; set; }
    public int y { get; set; }
}

只有我需要获得不同城市的插槽之间的距离

在每个城市,老虎机的位置从零开始,所以我不能直接用它们在城市之间进行计算。

世界之间不需要距离。

世界(世界有几个城市)

Worlds

城市和老虎机

City and slot

我需要例如黄色PC之间的距离,结果将是7

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题应该可以做到这一点:

 public static double GetDistance(int x0, int y0, int x1, int y1)
        {
            // mirror image dictionary to manipulate the parallel columns
            Dictionary<int, int> mirrorMatrixCols = new Dictionary<int, int>();
            mirrorMatrixCols.Add(0, 7);
            mirrorMatrixCols.Add(1, 8);
            mirrorMatrixCols.Add(2, 9);
            mirrorMatrixCols.Add(3, 10);
            mirrorMatrixCols.Add(4, 11);
            mirrorMatrixCols.Add(5, 12);
            mirrorMatrixCols.Add(6, 13);

            var result = 0;
            // the distance of cells to the point of y1 column
            result = (x1 - x0) * 7;
            // add the distance to the manipulated column
            result = result + (mirrorMatrixCols[y1] - y0);
            return result;    
        }

答案 1 :(得分:1)

根据您在评论中发布的说明,我编辑了您的问题以更好地反映该情景。您拥有占据City的{​​{1}}个对象。每个WorldCity中都有一个X / Y坐标,并包含World内具有X / Y坐标的Slot个对象。每个City具有相同的大小,即具有相同数量的行和列,并且在世界范围内,每个City与其邻居完全相邻。即没有差距,没有重叠,没有奇怪的城市等等。

鉴于此,一旦将其视为简单的参考框架问题,您的问题就很容易解决。也就是说,虽然City坐标是相对于包含Slot的{​​{1}},但它们仍然存在于City中。从物理或计算机图形中借用一个概念,这两个概念都有&#34;参考框架#34;其中一个参照系中的坐标可以通过简单的变换映射到另一个参照系,我们可以将这个概念应用于你的问题。

特别是,您可以将Slot的X / Y坐标从World参照系转换为Slot参照系,只需乘以{{ 1}} X / Y坐标单个城市的宽度和高度,然后加上City X / Y坐标:

World

通过这种转换,计算任意两个插槽之间的距离非常简单:

City