我正在重建我的GJK算法但是我的四面体的三角形面部测试存在问题。然而,我的观点和边缘测试已经完成。
我想测试原点是否在四面体之外并且最接近特定的三角形面。
到目前为止,我的方法是计算三角形面的法线并进行一系列点积测试,以确定原点是否在外面并且最接近该面。我的方法有一个主要问题:我无法保证我的法线面向外。请参阅我为更好的描述而制作的图:
正如你可以看到相同的三角形,根据顶点的顺序,需要不同的交叉积“排序”来产生面向外的法线。我有什么方法可以确保他们面向外面吗?如果没有,是否有更好的方法来测试这些面孔?以下是我的流程示例:
if (dot(ABC, AO) > 0) {
if (dot(ACD, AO) <= 0) {
if (dot(ADB, AO) <= 0) {
if (dot(DCB, DO) <= 0) {
// closest to face of ABC
}
}
}
}
}
参考:
ABC,ACD,ADB,DCB =三角面法线(如你所见,我假设图中的'左'三角形)
AO =从A到原点的矢量
DO =从A到原点的矢量
答案 0 :(得分:3)
让我们使用面部ABC。使用N = cross(B-A, C-A)
形成法线。如果dot(N, D-A) > 0
,则N
向内指向,需要反转。最后,如果需要,将N
标准化以获得正常单位。