我想积累三角模型/网格的边缘。例如,三角形立方体有18个边。如何累积3D三角形网格的边缘?在c C++中计算网格边缘的算法?
它看起来很简单容易,但实际上它太复杂了。我有三角形的所有相邻信息。例如,我有相邻的顶点和三角形,我知道哪些三角形具有共同的边,但问题是如何提取两个三角形之间的共同边。
需要考虑的一件事是不应该有任何重复的边缘点/顶点索引。
首先是如何计算边的总数。记住一个立方体有18个边。
我尝试了很多,但现在放弃了。 :) 任何想法? 。
更新1:
确定我有一个三角形T [I](指数V1,V2指数,指数V3),其具有三个边缘V1V2,V2V3,v3v1。
和我有一个所有边缘的相邻三角形。
T[i].index_of_sharedTri1_with_edge_v1v2,
T[i].index_of_sharedTri2_with_edge_v2v3,
T[i].index_of_sharedTri3_with_edge_v3v1;
现在哪个循环我需要做的,可以提取独特的边缘?我需要比较哪些信息?我需要比较边缘顶点,共享三角索引还是什么?我尝试了很多方法,但它太复杂了。
更新2:
GLTris *e = new GLTris[nb_Tris*3];
int n = getTotalEdges_Sorted(indices, nb_Tris, e);
cout<<n<<endl;
int ne = RemoveDublicatesFromAnSortedEdgeArray(e, n);
for(int i=0; i<ne; i++)
e[i].Cout();
我已经试过这和它的作品完美,但我需要弄清楚它是否会在所有类型的网格工作,它是一个有效的方法?
是的主要问题是这一个,当我将添加共享的三角形,那么我将如何知道这个三角形我已经添加或已经计数。例如在一个立方体的情况下,每个三角形与3个三角形共享。当我将标记为三角形的第一个边缘时,当共享三角形进入循环时,该边缘再次出现。 – furqan
我试图添加一些更多的细节,但它有助于扩展您的原始问题,提供更多关于您实际拥有的数据,结构和实际结果的更多信息。 – JasonD
谢谢你的加入。我试图理解你,但仍然困惑。我已经更新了我的问题,请现在查看。我没有使用链接列表,而只是c数据结构。问题是我有一切与三角形的邻接有关,但我需要比较哪些信息来提取共享边缘? “您可以根据其端点的两个索引为边缘建立ID。”如果多维数据集ID应该为18,那么这就是如何给共享边缘赋予唯一ID的问题。但是,如何? – furqan