如何计算某人的视野中是否存在某些东西

Mar*_*inW 3 language-agnostic algorithm math geometry vector

我有一个在2D空间和速度中具有位置的主题,两者都由向量表示.受试者的每侧视野为135度.它看起来与它移动的方向相同(速度矢量).

我有一个在矢量代表的2D空间中具有位置的对象.

在绘图中,蓝色背景上的对象是可见的,红色背景上的对象对于主题是不可见的.

如何计算在给定时刻哪些物体位于受试者的视野中?

哪些物体位于视野中

Gas*_*ssa 5

您只需要找到物体的距离和朝向它们的角度.然后,检查距离是否不大于该浅蓝色圆的半径,并且速度矢量和对象的矢量之间的角度不是太大.

欧几里德距离简单sqrt ((x2 - x1)^2 + (y2 - y1)^2)(链接).

至于角度,用极坐标系表示矢量(x2 - x1, y2 - y1)和速度,然后检查角度之间的绝对差值是否不超过135度.在编程语言中,通常有一个方便的功能来找到单个矢量(链接)的极角.(vx, vy)atan2 (y, x)


从矢量Ox逆时针方向测量点的极角.考虑我们有两点:速度矢量的终点(vx, vy)(左图)和从我们的对象(x1, y1)到所讨论的对象的矢量的终点(x2, y2):它是矢量(x2 - x1, y2 - y1)(中心图片).我们分别说极角是alphabeta.然后,(vx, vy)和之间的角度(x2 - x1, y2 - y1)是这些极角的差异(右图).

图1 图2 图3

但是有一个技巧.您获得的alphabeta值通常是从-PI到+ PI,或从0到2PI.因此,差异beta - alpha将介于-2PI和+ 2PI之间,并且您希望它介于-PI(从当前方向顺时针180度)和+ PI(从当前方向逆时针180度)之间.为此,一些简单的转换就足够了,比如这个伪代码:

if angle > +PI:
    angle := angle - 2PI
if angle < -PI:
    angle := angle + 2PI
Run Code Online (Sandbox Code Playgroud)