如何计算 php 中 X 和 Y 之间的距离?

How do I calculate the distance between X and Y in php?

我创建了一个脚本来测量游戏 Travian 中村庄之间的距离 我的代码工作正常,但只适用于特定分区。因为有第五个元素 ($X1, $Y1, $X2, $Y2) 是地图的大小

示例: 如果所有 ($X1,$Y1,$X2,$Y2) 数字小于 100,如(99、1、-85、-55、0、13 ...等)并且地图大小为 200(最大 200,- 200) 它工作正常..

这是代码:

<?php
$distance    =  round(sqrt(pow(bcsub($X1, $X2,1),2)+pow(bcsub($Y1,$Y2,1),2)),1) ;
?>
==the result of==
$X1 = 66
$Y1 = 55
$X2 = 44
$Y2 = 33
is (31.1)

但如果地图大小为 200(最大 200,-200)并且 :-

结果将不正确

==the result of==
$X1 = 101
$Y1 = 160
$X2 = 190
$Y2 = -194
is (365)
And the correct one is (100.6)

http://travian.kirilloid.ru/distance.php#cc=101,160,190,-194&srv=1.45&size=200&spd=7&art=1

(199, 199) 处的点与 (-199, -199) .. 相邻,它们之间的距离是 (4.2) .. 在我的代码中给我 (562.9) 。 ..

请问我该如何解决这个问题:(

链接计算器使用与毕达哥拉斯不同的公式。

var d = Math.hypot(
    delta(this.state.cc[0], this.state.cc[2], this.state.size),
    delta(this.state.cc[1], this.state.cc[3], this.state.size)
);
$('distance').innerHTML = d.toFixed(3).replace(/\.?0+$/, '');
function delta(c1, c2, size) {
    return (c1 - c2 + (3 * size + 1)) % (2 * size + 1) - size;
}

来源:http://travian.kirilloid.ru/js/distance.js?a


在 PHP 中是:

<?php

$X1 = 101;
$Y1 = 160;
$X2 = 190;
$Y2 = -194;
$size = 200;

function delta($c1, $c2, $size) {
  return ($c1 - $c2 + (3 * $size + 1)) % (2 * $size + 1) - $size;
}

$d = hypot (
    delta($X1, $X2, $size),
    delta($Y1, $Y2, $size)
);

var_dump($d); // float(100.64790112069)