四面体边缘测试

3
当测试一个点相对于四面体的位置时,有四种情况:它在四面体内部,最靠近一个顶点,最靠近一条边或最靠近一个面。这是一个二维图示:http://i.imgur.com/AmYNO.png。例如,当点P-A和B-A、C-A以及D-A的点积都为负数时,点P就最靠近顶点A。如果将三角形面沿法线方向拉伸以创建一个棱柱体,则如果点包含在该空间中,则点最接近该面。如果既不在顶点测试的结果中也不在面测试的结果中,则它最接近一条边。我想能够独立测试它是否最接近一条边,而不依赖于顶点或面测试的结果。是否有一种相对高效的方法来做到这一点?四面体不规则。
1个回答

3
你是指最靠近特定边缘还是最靠近一般边缘(而不是顶点或平面)?
如果是前者,那么一个点最靠近(一个特定的)边缘,如果它位于由两个垂直相邻面并通过边缘的两个平面以及通过相邻顶点的两个垂直于边缘的平面的交集中。因此,对所有四个平面测试您的点,如果它在所有平面的适当半空间中,则它最靠近该边缘。
详细地说,假设我们想要测试点P是否最靠近边缘AB,该边缘位于面ABC和BAD之间(按顺时针给出顶点)。然后进行四个测试:
(P−A)·(A−B)<0
(P−B)·(B−A)<0
(P−A)·((B−C)×(A−C)×(A−B))<0
(P−B)·((A−D)×(B−D)×(B−A))<0
(我想知道是否有更便宜的方法来执行第三和第四个测试?如果您知道,请告诉我!)

好的,我觉得我理解了,测试3和4中的那两个叉积是吗?还是你只是在相乘这些向量? - kbirk
叉积。(我想要一个在平面ABC中垂直于AB的向量。) - Gareth Rees
我无法保证我的三角面片的卷绕方式,有没有一种方法可以确保这些法线始终面向正确的方向? - kbirk
好吧,我想你可以自己解决:如果 (BC) × (AC) · (DA) < 0,则 ABC 是顺时针方向。 - Gareth Rees
顺便提一下,如果你正在实现这个,你应该检查所有我的方程式。我并不总是正确使用右手法则!(哪根手指再次指向叉积?) - Gareth Rees
好的,我觉得我已经形象化了这个问题,这是我制作的一个快速图像,http://i.imgur.com/bsLDk.png 想象一下这是一个四面体,从鸟瞰图的角度看,点A和B直接在顶部。交叉乘积在测试3和4中创造了绿色线条(从鸟瞰图中的平面)。当两者在测试3和4中都被测试时,你会得到黄色区域? - kbirk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接