php里面求坐标的间距,计算PHP中两个X,Y坐标之间的距离

我正在为游戏编写一个工具,它涉及计算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是相邻的?

解决方法:

更新(圆环):

好的,从你自己的评论来看,你的意思似乎就是圆环 – 圆环的表面 – 而不是球体. (这是一个很大的区别,你应该编辑你的问题:称它为球体是错误的.)

对此,答案非常简单 – 您给出的笛卡尔公式或多或少是正确的.但是,您需要包围距离,以便大于或等于250 = 500/2的任何内容都可以转换为0到250之间.

所以答案是这样的(我根本不懂PHP,所以这可能需要修改语法)

dx1 = min(dx, 500-dx)

dy1 = min(dy, 500-dy);

distance = Math.sqrt(dx1*dx1 + dy1*dy1);

(这假定您已将dx和dy定义为差异的绝对值.)

刚刚找到this routine,它在一个包装精美的函数中实现了相同的计算.

原始答案(球体):

你还没有解释你的(x,y)坐标如何映射到球体上的点!

(字面上)有无数个选择,每个选择对应于不同的map projection,并且每个选项的公式都不同.请注意,无论您做出何种选择,两个坐标的含义都是非常不同的.

例如,如果您的(x,y)确实是经度和纬度,那么有很多固定的公式(即,半身像),但您必须首先将0-> 499转换为0-> 360度经度和-90->纬度为90度. (注意,lon和lat在球体上的表现非常不同!)

但我强调,如果你在(x,y)中绘制的图形与它在球体上看起来的方式相比,你做出的任何选择都会扭曲你得到的平面几何形状.

(最后,如果你的意思是顶部边缘与底部相同,而右边与左边相同,那么你可能有圆环而不是球体!)

标签:php,algorithm,mysql,math,coordinate-systems

来源: https://codeday.me/bug/20190714/1456592.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值