c# - 判断三角形是否正对

标签 c# geometry

我试图找出两个三角形是否相互面对。我有形成三角形的点和它们的顺序(所以我可以使用叉积和左手拇指规则来衡量方向)。

我应该澄清我所说的面对的意思。三角形不需要正对,只要它们共享的平面是平行的,并且每个三角形的法线方向都朝向另一个平面。

这有点棘手,因为我允许每个三角形有几度的余地,所以平面可能不一定平行。

我的问题是,如何检查三角形是否正对着彼此? (即使只是检查法线是否在另一个三角形平面两侧的 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/

相关文章:

dynamic - 渲染后将几何体添加到 Three.js 网格中

c++ - 如何检查 3D 点是在 vector 的左侧还是右侧

python - 球体表面测地线(最短距离路径)之间的交点

c# - 从 Entity Framework 中的原始 SQL 查询返回多个相关实体类型

c# - 单元测试 AuthorizationHandler

c# - 按用户输入过滤获取错误消息无法获取表 0

algorithm - 检查经度/纬度坐标是否位于嵌入式设备的复杂多边形内?

java - Java 中奇怪的不匹配数据类型

c# - 获取 Facebook 的应用程序访问 token

c# - 重构方法以使用类作为参数