我有以下情况:
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; }
}
只有我需要获得不同城市的插槽之间的距离
在每个城市,老虎机的位置从零开始,所以我不能直接用它们在城市之间进行计算。
世界之间不需要距离。
世界(世界有几个城市)
城市和老虎机
我需要例如黄色PC之间的距离,结果将是7
答案 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}}个对象。每个World
在City
中都有一个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