4

我有一个巨大的 30x100 数组,代表一个足球场。我让玩家在里面移动。但是,当球被扔出时,我需要确定其他球员是否在轨迹的 +/-1 范围内以可能拦截传球。

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

我的领域看起来像

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

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

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

4

3 回答 3

3

所以你有一个传球手($x0, $y0),一个如果没有人接住传球就会掉下来的地方($x1, $y1),还有一个潜在的接球手($x, $y)。您想找出接收器 at($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 ) );

你可以在这里找到一个推导。

但是,这只会让您到达(无限长)line的距离,这可能在包含 pass的线段之外。要获得正确答案,请在此处查看 Grumdrig 的答案:点与线段之间的最短距离

于 2012-05-10T21:38:44.303 回答
2

将传球者平移到原点,将球的轨迹旋转到X轴,然后检查路径附近的球员(即相同的x坐标符号)的y坐标是否在-1和1之间。

于 2012-05-10T21:40:32.273 回答
0

极坐标系是要走的路。

于 2012-05-10T21:35:57.347 回答