我在做一个游戏。我知道智能体位置(x,y)及其在范围(-PI PI)中的方向,以及感兴趣对象的位置(x,y)。如何判断agent是否正在查看对象?
发布于 2015-12-08 09:44:21
将向量从您的代理获取到目标(tx - ax, ty - ay)
,并找到它的方向(通常是atan2(ty - ay, tx - ax)
,但您没有指定see1)。然后比较这两个方向。
如果您知道播放器的朝向方向(也可以从orientation1计算),则可以使用点积:
c := dot(dir, normalized(t - a))
假设a
是智能体的位置,t
是目标的位置,那么c
就是它们之间内角的余弦。
1如果方向是逆时针方向,且x轴方向为0,则朝向方向将为dir := (cos(angle), sin(angle))
。
发布于 2015-12-08 10:07:59
你需要一些定量的标准来决定“看”还是不看。它可以用角度(两侧小于5°)或距离(两侧小于50厘米)来表示。
在第一种情况下,计算智能体和点的相对方向(通过atan2(δy,δx))并取差值。在第二种情况下,将代理与点之间的距离乘以角度差的切线。
请注意,差值必须以360°为模计算,并且必须拒绝大于90°的差值。还要确保使用一致的弧度/度。
https://stackoverflow.com/questions/34152462
复制