翻转两个三角形的边

use*_*224 1 algorithm geometry vertices flip

我有一个带索引的数组。其中三个指数构成一个三角形。现在我取一个三角形并搜索另一个具有共享边的三角形。这些三角形现在构成了一个对角分割的四边形。我如何(在代码中)翻转这条对角边/三角形,以便它连接对角线?我正在寻找的东西在 Blender、Maya、3ds max 等 3D 程序中通常被称为“翻转边缘”。

四边形边缘翻转

我被这个困住了。有任何想法吗?

Sha*_*baz 5

这取决于你如何实现你的结构。例如,如果您有这样的结构:

struct Vertex
{
    double position[3];
};

struct Triangle
{
    unsigned int vertices[3];
};

Vertex nodes[N_NODES];
Triangle triangles[N_TRIANGLES];
Run Code Online (Sandbox Code Playgroud)

其中,vertices是 的索引nodes,然后给定两个三角形:

Triangle t1, t2;
Run Code Online (Sandbox Code Playgroud)

如果你有

t1.vertices[i1] = t2.vertices[j1];
t1.vertices[i2] = t2.vertices[j2];
Run Code Online (Sandbox Code Playgroud)

该装置t1.vertices[i1] --- t1.vertices[i2]是与共享边缘t2.vertices[j1] --- t1.vertices[j2],并且假定i3j3是的第三vericest1t2分别作为该图像中所示:

在此处输入图片说明

然后你可以通过改变一些索引来完成翻转。最直接的方法是:

unsigned int t1_v[3], t2_v[3];

t1_v[0] = t1.vertices[i1];  // shared
t1_v[1] = t1.vertices[i2];  // shared
t1_v[2] = t1.vertices[i3];  // not shared

t2_v[0] = t2.vertices[j1];  // shared (unnecessary)
t2_v[1] = t2.vertices[j2];  // shared (unnecessary)
t2_v[2] = t2.vertices[j3];  // not shared

t1.vertices[0] = t1_v[0];  // previously shared
t1.vertices[1] = t1_v[2];  // previously not shared
t1.vertices[2] = t2_v[2];  // previously not shared

t2.vertices[0] = t2_v[0];  // previously shared
t2.vertices[1] = t2_v[2];  // previously not shared
t2.vertices[2] = t1_v[2];  // previously not shared
Run Code Online (Sandbox Code Playgroud)

请注意,每个新三角形由 2 个非共享顶点和一个共享顶点组成。