php - 在PHP中计算两个X,Y坐标之间的距离

标签 php mysql algorithm math coordinate-systems

我正在为一款游戏编写工具,该游戏涉及计算 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/

相关文章:

php - 在 PHP 上使用 xpath : how to select first child?

php - 当 functions.php 中需要父文件时如何覆盖子 Wordpress 主题中的父文件

algorithm - 将子集和减少到多项式包装

MySQl,无法从Java向表中插入数据

javascript - 如何获取使用 $.ajax 返回的 MySQL 查询结果

algorithm - 递归构建六边形网格

algorithm - 当我阅读 Djiktra 的算法时,负边会失败,但我实现了相同的概念并且我的代码正在运行?有什么错误吗?

php - 我怎样才能用 div 设置这个 php 的样式?

javascript - 从 PHP 网页发送时,AngularJS Controller 函数参数未定义

php - 刷新数据库并删除条目