我试图找出最好的方法来确定一个点是否是视锥内。 我有一些工作,但不能确定它是否是太麻烦了,也许有我应该做这更优雅/有效的方式。
假设我想找出是否点“X”是平截里面:
一旦我有截(4附近分,4个远点)的8点的位置,我基于从三个点的形成一个三角形的计算正常的平截头体的每个平面。 例如(如上面在图中),用于右侧,我从三个点的使两个向量:
Vector U = FBR - NBR
Vector V = FTR - NBR
然后我提出这两个矢量之间的叉积,确保缠绕顺序是正确的垂直于所述平截头体的内部被指向,在这种情况下V x U
将给出正确的正常。
Right_normal = V x U
一旦我有正常的每架飞机,我然后检查点x是否在平面的前面或后面由X到平面的点之一绘制一个矢量:
Vector xNBR = x - NBR
然后,我做这个载体,正常和测试,答案是肯定的,确认点x是否是截头的那架飞机的正确侧之间的点积:
if ( xNBR . Right_normal < 0 )
{
return false;
}
else continue testing x against other planes...
如果x为正的所有平面,那么它是视锥内。
所以这似乎工作,但我只是想知道我是否在一个愚蠢的方式这样做。 我甚至不知道什么是交叉产品“的含义,直到昨天,所以这一切都相当新的给我,我可能会做一些蠢话。