我试图找出两个三角形是否相互面对。我有形成三角形的点和它们的顺序(所以我可以使用叉积和左手拇指规则来衡量方向)。
我应该澄清我所说的面对的意思。三角形不需要正对,只要它们共享的平面是平行的,并且每个三角形的法线方向都朝向另一个平面。
这有点棘手,因为我允许每个三角形有几度的余地,所以平面可能不一定平行。
我的问题是,如何检查三角形是否正对着彼此? (即使只是检查法线是否在另一个三角形平面两侧的 90 度以内,我遇到的问题是角度计算只给出这些计算的内角)。
我不确定我对问题的描述有多准确。如果有任何其他信息我可以提供或我可以澄清的事情,请询问。
谢谢。
最佳答案
假设你的三角形是 A : A1A2A3 和 B : B1B2B3
1) 计算 N1,即 A1A2 和 A1A3 的归一化叉积。
2) 测试B是否被A'看',即N1 • A1B1 > 0。
3) 计算 N2,B1B2 和 B1B3 的归一化叉积。
如果您想测试“严格面向”,则测试 N1•N2 == -1(其中 • 是点积)。
对于不太严格的面,您可以测试 N1•N2 - (-1) < 一些小值。
正如@BenAaronson 指出的那样,您可能想通过测试 (A1A2,A1A3) 与 (B1B2,B1B3) 是否共面来测试矩形是否在同一平面上。
如果 O 是原点,测试 N1•OA1 = - N2•OB1
(rq 这里 N2 = - N1 所以你可以测试 N1•OA1 = N1•OB1)。
关于c# - 判断三角形是否正对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24529677/