Math 如何判断代理人面临的问题?

Math 如何判断代理人面临的问题?,math,game-engine,trigonometry,Math,Game Engine,Trigonometry,我正在做一个游戏。我知道代理的位置(x,y)及其在范围内的方向(-PI)和感兴趣对象的位置(x,y)。如何判断代理是否正在查看对象 将向量从您的代理移动到目标(tx-ax,ty-ay),并找到它的方向(通常atan2(ty-ay,tx-ax),但您没有指定,请参见[1])。然后比较两个方向 如果您有播放器的朝向(也可以根据方向[1]计算),您可以使用点积: c := dot(dir, normalized(t - a)) 假设a是代理的位置,而t是目标的位置,那么c是它们之间内角的余弦 [1]

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

将向量从您的代理移动到目标
(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(角度)、sin(角度))

将向量从您的代理移动到目标
(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(角度)、sin(角度))

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

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


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

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

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

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