如何检查三角形的三个顶点是循环顺序还是反循环顺序
本文关键字:循环 顺序 顶点 三个 何检查 检查 三角形 | 更新日期: 2023-09-27 18:34:47
我的目标是检查 STL 文件中三角形的法线方向是否一致??
例如。STl 文件如下所示,我想检查所有方面是否在同一方向,即向外。??
小平面正常 0 0 -1
outer loop
vertex -20.5411 -4.36615 0
vertex -16.9894 -12.3435 0
vertex -19.1845 -8.54147 0
endloop
端面
面正态 -0.994522 0.104528 0
outer loop
vertex -21 0 0
vertex -21 0 2
vertex -20.5411 4.36615 0
endloop
端面
我想通过顶点的叉积计算法线,但我怎么知道方向??
我读了"循环单位向量的交叉乘积是正的",但是我应该如何在我的问题中使用这个规则?
任何人都可以帮我吗??我真的被困在这里:(
检查法线的点积和 2 个边方向的叉积的符号,例如给定法线N
和点A
、B
、C
:
((B - A) x (C - A)) * N
叉积应产生与法线方向相同的向量,并且由于 2 个向量的点积S
且T
为
S * T = |S| * |T| * cos(theta)
其中theta
是向量之间的角度,当且仅当方向正确时,这应该是正的。(这里假设三角形没有 2 个点在同一位置(
Java代码示例(使用javafx.geometry.Point3D
(:
boolean check(Point3D normal, Point3D p1, Point3D p2, Point3D p3) {
return p2.subtract(p1)
.crossProduct(p3.subtract(p1))
.dotProduct(normal) > 0;
}
找到具有
较高 Z 坐标的三角形,检查法线是几乎向外(Z+ 方向(还是几乎向内(Z- 方向(。知道这一点后,只需移动到未访问的相邻三角形,检查正常翻转并将它们标记为已访问。
一旦你访问了所有三角形,就停下来。