coordinate-systems - 在尊重 Asteroids 风格环绕的同时,如何计算笛卡尔空间中两点之间的距离?

标签 coordinate-systems euclidean-distance

我有两个点 (x1, y1) 和 (x2,y2)它代表我空间中两个实体的位置。我使用毕达哥拉斯定理计算它们之间的欧几里得距离,一切都很好。但是,如果我的空间变得有限,我想在“环绕” map 接缝的点之间定义一个新的最短距离。例如,如果我将 A 点设为 (10, 10),将 B 点设为 (90,10),并且我的 map 宽度为 100 个单位,我想要将 A 和 B 之间的距离计算为 20(从 map 的右边缘到左边缘),而不是 80,这是正常的欧几里得距离。

我认为我的问题是我使用的坐标系不太适合我正在尝试做的事情,而且我的平面方形 map 实际上更像是一个无缝的 donut 形状。任何关于如何实现这种性质的系统并从笛卡尔坐标来回转换的建议也将不胜感激!

最佳答案

环形平面?好吧,我咬一口。

var raw_dx = Math.abs(x2 - x1);
var raw_dy = Math.abs(y2 - y1);

var dx = (raw_dx < (xmax / 2)) ? raw_dx : xmax - raw_dx;
var dy = (raw_dy < (ymax / 2)) ? raw_dy : ymax - raw_dy;

var l2dist = Math.sqrt((dx * dx) + (dy * dy));

在 x 和 y 坐标的翻转行为与使用 method of complements 中的基数补码表示的有符号整数的翻转行为之间存在对应关系。 .

如果您的坐标边界恰好映射到您的语言支持的二进制整数类型的边界,您可以利用几乎所有当前机器使用的二进制补码表示,只需直接执行减法,忽略溢出并重新解释结果作为与原始坐标相同大小的有符号值。在一般情况下,你不会那么幸运,所以上面的 abs 跳舞,比较和减法是必需的。

关于coordinate-systems - 在尊重 Asteroids 风格环绕的同时,如何计算笛卡尔空间中两点之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4940636/

相关文章:

opengl - 每片段光照坐标系

matlab - 使用 2D 图像坐标查找相对于相机的 3D 坐标

julia - 两个 n 维向量之间的欧几里德距离

python-3.x - kmeans群集中节点与质心之间的距离?

向量空间模型 : Cosine Similarity vs Euclidean Distance

geometry - 在对几何形状进行数学计算时避免被零除的最佳方法

c++ - 在笛卡尔坐标和屏幕坐标之间转换

c++ - 如何根据距已知点的 4 个距离找到点的 3D 坐标

python - 计算 N 个样本和聚类质心之间的平方欧氏距离的最有效方法是什么?

c# - 使用 Kinect 测量人的高度