根据共享顶点c#将两个三角形合并为一个四边形
本文关键字:合并 三角形 四边形 一个 两个 共享 顶点 | 更新日期: 2023-09-27 18:02:40
在二维环境中,假设一个没有孔的网格。
如何在给定三角形顶点信息的情况下形成四边形-例如,以四个三角形为例。
1 2 3
+-------+-------+
|' |' |
| ' | ' |
| ' | ' |
| '| '|
+-------+-------+
4 5 6
三角形为(假设绕线顺序为顺时针)
A=(1, 5, 4) B=(1, 2, 5) C=(2, 6, 5) D=(2, 3, 6)
边为
A=(1-5, 5-4, 4-1) B=(1-2, 2-5, 5-1) C=(2-6, 6-5, 5-2) D=(2-3, 3-6, 6-2)
共享一条边的三角形是:
- A和B正好共享1条边1-5(因为它与5-1相同)
- B和C共享2-5
- C和D共享2-6
基于此信息,可以限定为
- 2个四元
(1, 2, 5, 4)
和(2, 3, 6, 5)
然而,我不知道如何确定所有的四项条件,并选择留下最少数量的退化三角形。
我有所有的网格三角形信息(三角形的数量,它们的顶点如前所示)你知道什么库或代码片段我可以开始吗?
我在这里贴了一个类似问题的答案:74987年https://gamedev.stackexchange.com/questions/74807/convert-triangles-to-quads-of-a-mesh/74987
你可以很容易地得到完美的答案。在真实的网格中,在大多数情况下,你实际上会有可能变成四边形的"补丁",但你不会有一个由大量三角形组成的平面的整个表面,所以我个人不会花大量的时间来优化它。如果你有一个完全由三角形组成的平面,我认为最坏的情况是在每个四边形之间有一个三角形。因为每个四边形都是由两个三角形组成的,所以你只会看到大约30%的潜在最坏情况。
因为将它们变成四元组是一个相对较快的过程,所以我不会花大量的时间去优化它,我只会创造一些能够强迫每一次可能迭代的东西,并选择最好的一个。你可以终止任何特定的支票,只要你比目前最好的情况更糟。如果你随机化你的起始点,你就不需要检查所有的东西。