hor*_*irs 3 coordinate-systems euclidean-distance
我有两个点(x 1,y 1)和(x 2,y 2),它们代表我空间中两个实体的位置.我用毕达哥拉斯定理计算它们之间的欧几里得距离,一切都很美妙.但是,如果我的空间变得有限,我想在"包裹"地图接缝的点之间定义一个新的最短距离.例如,如果我有A点(10, 10)
和B点(90,10)
,并且我的地图是100个单位宽,我想计算A和B之间的距离为20(从地图的右边缘到左边缘) ),而不是80,这是正常的欧几里德距离.
我认为我的问题是我使用的坐标系统并不适合我正在尝试做的事情,而且我的扁平方形地图更像是一个无缝的圆环形状.关于如何实现这种性质的系统以及从笛卡尔坐标来回转换的任何建议也将受到赞赏!
环形平面?好的,我会咬人的.
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));
Run Code Online (Sandbox Code Playgroud)
x和y坐标的翻转行为与使用补语方法中的基础补码表示的有符号整数的翻转行为之间存在对应关系.
如果您的坐标界限完全映射到您的语言支持的二进制整数类型的边界,您可以通过简单地直接执行减法,忽略溢出并将结果重新解释为签名来利用几乎所有当前机器使用的二进制补码表示.与原始坐标大小相同的值.在一般情况下,你不会那么幸运,所以上面的舞蹈abs
,比较和减去是必需的.