具有周期性边界的格子上的距离

时间:2017-10-27 10:26:03

标签: math language-agnostic distance

我有一个大小为LxL的正方形格子。在这个格子中,我可以有经典的4邻域网格或8邻居网格(也包括对角线)。

给定格子(i1,j1)(i2,j2)上两点的坐标,我想计算它们在4邻域网格和8邻域网格之间的距离,同时考虑周期边界条件

对于4邻居情况,没有周期性边界条件,距离是曼哈顿距离d=|i1-i2|+|j1-j2|。 如果我想考虑周期性边界,我可以多次计算距离(例如,(i2,j2)改变(i2,j2-L))并采取最小值,但我确信还有更多有效的方法来做到这一点。

关于8邻居案例,我发现了这个问题:Calculate distance on a grid between 2 points(在我的情况下,我会将sqrt(2)替换为1)但是它并没有解决边界条件的问题。

关于如何计算这些距离的任何伪代码?越快越好。

1 个答案:

答案 0 :(得分:2)

查找循环坐标差异:

dx = Abs(x1 - x2)
if dx > L/2
   dx = L - dx
similar for dy

这种情况下的距离称为曼哈顿距离

dist = dx + dy

如果对角移动成本为1,那么对于8邻居案例解决方案很简单 - 要达到新位置,必须从dx和dy步骤执行最大值,但不需要更多步骤,因为沿着较短方向移动是合并的沿着更长的方向 - 对角线移动。

dist = Max(dx, dy)

(另请注意,对角线部分为Min(dx,dy),hor / vert部分为Abs(dx - dy)。这些表达式的总和等于dx,dy的最大值)