我有一大堆30x100代表一个足球场。我让玩家继续前进。然而,当球投掷时,我需要确定其他球员是否在距离轨迹的+/- 1范围内以便可能拦截传球。
由于一些(和大多数)通行证被对角抛出,我很难弄清楚如何确定一个算法来评估这样的事情。
我的字段看起来像
1 2 3 4 5 6 7 ...
2
3
4
5
6
7
...
字符只能从积分器移动(因此每个时刻都有一组坐标,例如(3,2)或(20,90)。
最简单的方法是找出一名球员是否在我的传球轨迹的某个范围内(比如传球从(2,4)到(30,15))?
答案 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是要走的路。