我正在为一款游戏编写工具,该游戏涉及计算 500 个单位宽的环形平面上两个坐标之间的距离。也就是说,[0,0]到[499,499]是有效坐标,[0,0]和[499,499]也是紧邻的。
目前,在我的应用程序中,我正在比较具有 [X,Y] 位置的城市与用户自己预先配置的 [X,Y] 位置之间的距离。
为此,我找到了这个算法,它的工作原理:
Math.sqrt ( dx * dx + dy * dy );
因为按距离对分页列表进行排序是一件很有用的事情,所以我在 MySQL 查询中实现了这个算法,并使用我的 SELECT 语句的以下部分使其可用于我的应用程序:
SQRT( POW( ( ".strval($sourceX)." - cityX ) , 2 ) + POW( ( ".strval($sourceY)." - cityY ) , 2 ) ) AS distance
这对许多计算都适用,但没有考虑到 [0,0] 和 [499,499] 是彼此的小角这一事实。
假设 0 和 499 相邻,有什么方法可以调整此算法以生成准确的距离?
最佳答案
我假设你的意思是环绕坐标而不是球形。就像一张扁平的纸,两端神奇地相互连接。
这意味着对于大小为 500x500 的 map ,x(或 y)方向上的距离最多为 250。(如果超过 250 步,我们最好向后走 500-x 步。)
解决这个问题的一个简单方法是
dx = Math.abs(dx);
dy = Math.abs(dy);
if (dx > 250)
dx = 500 - dx;
if (dy > 250)
dy = 500 - dy;
distance = Math.sqrt ( dx * dx + dy * dy );
关于php - 在PHP中计算两个X,Y坐标之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578111/