如何告诉代理商面临一个问题?

时间:2015-12-08 09:39:27

标签: math game-engine trigonometry

我正在开发一款游戏。我知道代理postion(x,y)及其在范围内的方向(-PI PI)和感兴趣对象的位置(x,y)。如何判断代理是否在查看对象?

2 个答案:

答案 0 :(得分:0)

将代理中的向量移至目标(tx - ax, ty - ay)并找到其方向(通常为atan2(ty - ay, tx - ax),但您未指定,请参阅[1])。然后比较两个方向。

如果你有玩家的面向方向(也可以从你的方向计算[1]),你可以使用点积:

c := dot(dir, normalized(t - a))

a成为你的代理人的位置,并t你的目标位置,然后c是他们之间内角的余弦。

[1]如果您的方向逆时针方向且x轴方向为0,则面向方向将为dir := (cos(angle), sin(angle))

答案 1 :(得分:0)

你需要一些量化标准来决定“看”与否。它可以用角度(两侧小于5°)或距离(两侧小于50厘米)表示。

在第一种情况下,计算代理和点的相对方向(通过atan2(δy,δx))并取差值。在第二种情况下,将代理和点之间的距离乘以角度差的正切。

请注意必须以360°模数计算差异,并且必须拒绝大于90°的差异。还要确保始终如一地使用弧度/度数。