我正在开发一款游戏。我知道代理postion(x,y)及其在范围内的方向(-PI PI)和感兴趣对象的位置(x,y)。如何判断代理是否在查看对象?
答案 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°的差异。还要确保始终如一地使用弧度/度数。