我有2个三角形和顶点p0,p1,p2,p3。这两个三角形共享一个优势。从这两个三角形我想做一个由4个顶点给出的四面体。与我一起工作的图书馆要求“给出4个顶点,使得当从外部观看时,在图中定义四面体面的四个顶点三元组按照逆时针顺序出现”。假设两个三角形中的一个是p0,p1,p2,则计算法线为(p1-p0)(十字)(p2-p0)。有人可以告诉我一种方法来确保满足这个条件吗?三角形网格的四面体方向
7
A
回答
10
简短的回答:
的条件是p3
必须由(p0, p1, p2)
确定的平面的正确的一面。
所以,计算正常的该平面之后,就需要确定是否从(比方说)p0
到p3
载体在正常的相同的方向,或沿相反的方向指向,通过取点积dot(normal, p3-p0)
。
更多从数学上讲:
你需要找到的四个点的齐次坐标形成的4×4矩阵的行列式。行列式的符号决定条件是否被满足;相应的符号取决于所使用的确切约定,但理想的应该是积极的:
require:
0 < det(p0, p1, p2, p3)
== det [ p0.x p0.y p0.z 1 ]
[ p1.x p1.y p1.z 1 ]
[ p2.x p2.y p2.z 1 ]
[ p3.x p3.y p3.z 1 ]
如果一个特定的有序集合点,具有负的决定因素,你可以通过交换点中的任意两个固定(这将否定决定簇):
e.g., swapping p0 and p2:
det(p0, p1, p2, p3) = - det(p2, p1, p0, p3)
^ ^ ^ ^
,或者更一般地,4个顶点的even and odd permutations之间的切换。
如果行列式为零,则这四个点是共面的,不能像这样修复。
最后,代码:
相对简单的方式来计算此行列式与3- d矢量数学:
let: v1 = p1 - p0
v2 = p2 - p0
v3 = p3 - p0
norm12 = cross(v1, v2)
-> determinant = dot(norm12, v3)
最终决定因素也被称为“三重积” v1,v2和v3。
请注意,我一直在犹豫,试图从您的问题中解码确切的符号约定(即,您是否需要决定因素是正数还是负数):您提供的措辞和图表不仅是有点混淆。
由于您拥有原始图书馆及其文档,因此您处于回答此问题的最佳位置。作为最后的手段,你可以尝试一下经验方法:尝试两种迹象,并选择一个不炸毁的...
+0
非常感谢你的澄清答案。它像一个魅力 – Ray
相关问题
- 1. 从封闭的三角形网格创建四面体网格
- 2. Matlab绘图四面体和三角形
- 3. 检测三角网格内的四面体?
- 4. 与三角形的砌体网格?
- 5. 三角形的方向(三角形指向的地方)
- 6. 将四边形和三角形网格转换为仅由三角形组成的网格
- 7. 三角形网格的MeshGrid
- 8. 插值三角形网格
- 9. 用OpenGL绘制一个带有四个三角形的四面体
- 10. 将三角形网格化为网格
- 11. 矩形网格内的三角形
- 12. 三角形网格上的最近点
- 13. 带网格的三角形轮廓
- 14. 三角形网格中最近的点
- 15. WebGL的三角形立方体
- 16. 更改公开三角形的方向
- 17. 简化四面体网格的库
- 18. 阅读在XNA从FBX文件四边形,或将一个三角多边形网格成四边形
- 19. Unity3D:检测网格的三角形与其他游戏物体
- 20. 两个三角形的方形网格没有在三个js中呈现
- 21. Matlab:将三角形网格转换为规则(正方形)网格
- 22. 将OBJ文件中的四角形转换为三角形?
- 23. 连接两个三角形网格
- 24. 三角形网格点云插值
- 25. 添加sin波到三角形网格
- 26. 如何将三角形网格导入带有小面的SketchUp?
- 27. 网格表面三角形的高宽比
- 28. Mathematica - “三角测量” - 在图上绘制三角形网格
- 29. 面向三角形检查场景的OOP方法
- 30. 将网格划分为四面体?
这是一个耻辱,你去所有的麻烦提供一个非常清晰的图,然后用问题文本中顶点的错误标签。我第一次读它时非常困惑。 –
您通常需要一些其他方式来决定外部 - 通常这是来自网格算法(行军立方体等) –
如果两个三角形都有以与描述中提到的相同方式计算的法线不能只选择一边(正常指向的那个)并将其视为前方还是后方? – Ray