这取决于你如何实现你的结构。例如,如果您有这样的结构:
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],并且假定i3和j3是的第三vericest1和t2分别作为该图像中所示:

然后你可以通过改变一些索引来完成翻转。最直接的方法是:
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 个非共享顶点和一个共享顶点组成。
| 归档时间: |
|
| 查看次数: |
1371 次 |
| 最近记录: |