我在兩個庫(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