gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:54:06 24 4
gpt4 key购买 nike

我有两个点 (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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com