我有一个对象,它朝向特定方向,并且具有(例如)45度的视野范围和有限的可见距离。我已经完成了所有初步检查(四叉树节点和距离),但现在我需要检查一个特定对象是否在那个视锥范围内(在这种情况下,我需要决定是否只在能看到该对象时才跟随它)。
除了从Direction - (FieldOfView / 2)
到Direction + (FieldOfView / 2)
为每个角度投射一条射线(我现在正在这样做,效果很糟糕)之外,进行此可见性检查的最佳方法是什么?
回答:
计算你的视角方向(理解为一个向量)和从你指向目标的向量之间的夹角。如果该夹角小于视野范围的一半(FieldOfView/2),那么你就可以看到该目标。
该夹角为:
arccos(scalarProduct(viewDirection, (object - you)) / (norm(viewDirection)*norm(object - you))).