环形包裹(x和y包裹)地图上点之间的最短距离?

Jus*_* L. 14 language-agnostic algorithm math geometry distance

我有一个环形欧几里德地图.也就是说,曲面是一个平坦的欧几里德矩形,但是当一个点移动到右边界时,它将出现在左边界(在相同的y值处),由x_new = x_old%width给出

基本上,点基于以下绘制:*参见编辑

(x_new, y_new) = ( x_old % width, y_old % height)
Run Code Online (Sandbox Code Playgroud)

Think Pac Man - 走出屏幕的一边会让你出现在对面的边缘.

计算两点之间最短距离的最佳方法是什么?典型的实施方式表明地图对角处的点距离很大,而实际上,实际包裹的距离非常接近.

我能想到的最好的方法是计算经典Delta X和Wrapped Delta X,以及经典Delta Y和Wrapped Delta Y,并使用Sqrt(x ^ 2 + y ^ 2)距离公式中每对的较低者.

但这将涉及许多检查,计算和操作 - 我认为可能没有必要.

有没有更好的办法?


编辑

当一个物体移动时,它移动到位置(x_old,y_old),通过上面的公式运行它,并存储(x_new,y_new)作为它的位置.仅添加上述公式以阐明当物体越过边界时会发生什么; 实际上,每次只有一个(x,y)对存储在每个对象中.

Dav*_*d Z 11

我能想到的最好的方法是计算经典Delta X和Wrapped Delta X,以及经典Delta Y和Wrapped Delta Y,并使用Sqrt(x ^ 2 + y ^ 2)距离公式中每对的较低者.

就是这样,我认为没有更快的方法.但是计算并不难; 你可以做点什么

dx = abs(x1 - x2);
if (dx > width/2)
  dx = width - dx;
// again with x -> y and width -> height
Run Code Online (Sandbox Code Playgroud)

(我相信你可以把它翻译成你的首选语言)