PHP确定距离

时间:2012-05-10 21:33:39

标签: php

我有一大堆30x100代表一个足球场。我让玩家继续前进。然而,当球投掷时,我需要确定其他球员是否在距离轨迹的+/- 1范围内以便可能拦截传球。

由于一些(和大多数)通行证被对角抛出,我很难弄清楚如何确定一个算法来评估这样的事情。

我的字段看起来像

1 2 3 4 5 6 7 ...
2
3
4
5
6
7
...

字符只能从积分器移动(因此每个时刻都有一组坐标,例如(3,2)或(20,90)。

最简单的方法是找出一名球员是否在我的传球轨迹的某个范围内(比如传球从(2,4)到(30,15))?

3 个答案:

答案 0 :(得分:3)

所以你在($x0, $y0)有一个传球手,如果没有人抓住传球将会传球,($x1, $y1)($x, $y)的潜在接球手。您想要找出($x, $y)处的接收器与($x0, $y0)($x1, $y1)之间的距离。

这是由这个等式给出的:

$d = abs( ( $x1 - $x0 ) *  ( $y0 - $y ) - ( $x0 - $x ) * ($y1 - $y0 ) ) / 
    sqrt( pow( $x1 - $x0, 2 ) + pow ($y1 - $y0, 2 ) );

您可以找到派生here

然而,这只能到达(无限长)线的距离,这可能位于包含传递的行之外。要获得正确的答案,请在此处查看Grumdrig的答案:Shortest distance between a point and a line segment

答案 1 :(得分:2)

将传球手转换为原点,将球的轨迹旋转到X轴,然后检查路径附近的任何球员(即相同的x坐标)是否具有-1和1之间的y坐标。

答案 2 :(得分:0)

Polar coordinate system是要走的路。