我有一个对象,它在二维空间中有一个位置和一个速度,两者都由一个向量表示。受试者的视野为每侧 135 度。它看起来与移动方向相同(速度矢量)。
我的对象在二维空间中的位置由向量表示。
图中蓝色背景的物体是可见的,红色背景的物体是不可见的。
我如何计算在给定时刻哪些物体位于主体的视野中?
最佳答案
你只需要找到到物体的距离和朝向它们的角度。然后,检查距离不大于那个浅蓝色圆圈的半径,并且速度矢量与物体的矢量之间的角度不是太大。
欧氏距离就是sqrt ((x2 - x1)^2 + (y2 - y1)^2)
( link )。
关于角度,表示矢量(x2 - x1, y2 - y1)
和速度(vx, vy)
在polar coordinate system ,然后检查角度之间的绝对差值是否不超过 135 度。在编程语言中,通常有一个方便的函数 atan2 (y, x)
来求出单个向量的极角 (link)。
点的极角是从向量 Ox 沿逆时针方向测量的。考虑我们有两个点:速度矢量的端点 (vx, vy)
(左图)和从我们的对象 (x1, y1)
到对象的矢量的端点有问题的 (x2, y2)
:它是向量 (x2 - x1, y2 - y1)
(中心图片)。假设极角分别为 alpha
和 beta
。那么(vx, vy)
和(x2 - x1, y2 - y1)
之间的夹角就是这两个极角的差值(右图)。
但是有一个窍门。您获得的 alpha
和 beta
值通常是从 -PI 到 +PI,或者从 0 到 2PI。因此,beta - alpha
的差值介于 -2PI 和 +2PI 之间,您希望它介于 -PI(从当前方向顺时针旋转 180 度)和 +PI(从当前方向逆时针旋转 180 度)之间方向)。为此,一些简单的转换就足够了,例如这个伪代码:
if angle > +PI:
angle := angle - 2PI
if angle < -PI:
angle := angle + 2PI
关于algorithm - 如何计算某物是否在某人的视野中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22542821/