我在两个库(Opencascade和DWF Toolkit)之上构建了一个CAD文件转换器。从“三角形汤”中找到唯一的顶点
然而,我的问题是plattform不可知:
鉴于:
我已经生成的网格三角形面的一个列表的形式通过我的申请构造的模型。每个三角形通过三个顶点定义,其中包含三个浮点数(x,y坐标)。由于三角形形成网格,因此大部分顶点由多于一个三角形共享。
目标:
我需要找到独特的顶点列表,并产生由在此列表中三个指数的元组的面孔组成的数组。
什么我想要做的是这样的:
//step 1: build a list of unique vertices
for each triangle
for each vertex in triangle
if not vertex in listOfVertices
Add vertex to listOfVertices
//step 2: build a list of faces
for each triangle
for each vertex in triangle
Get Vertex Index From listOfvertices
AddToMap(vertex Index, triangle)
虽然我确实有这这样做,第一步(独特的顶点列表的生成)的实现是在O3顺序很慢(N !),因为每个顶点都与已经在列表中的所有顶点进行比较。我认为“嘿,让我们使用std :: map构建我的顶点组件的hashmap,这应该可以加快速度!”,但仅仅发现从三个浮点值生成一个唯一关键字并不是一项简单的任务。
在这里,stackoverflow的专家开始发挥作用:我需要某种散列函数,它可以在3个浮点上工作,或者任何其他函数从3d顶点位置生成唯一值。
这个顶点唯一性必须有多强大?我的意思是,你只是想节省空间,还是需要非常健壮的拓扑结构?假设顶点Va和Vb得到不同的ID pn和pq,但实际上真的是'相同',是一个交易断路器? – Tarydon 2010-03-09 08:18:18
是的,这是因为我试图导出拓扑的网格。如果源中的单个顶点将在目标中存在多次,则从其构建的三角形不会共享边 - 拓扑可能会打开。 – sum1stolemyname 2010-03-09 10:49:20