如何计算 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)并且 :-
- 我选择一个大于100的数字
- 其中一个数字是负数
结果将不正确
==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)
我创建了一个脚本来测量游戏 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)并且 :-
- 我选择一个大于100的数字
- 其中一个数字是负数
结果将不正确
==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)