Estoy construyendo un convertidor de archivos CAD sobre dos bibliotecas (Opencascade y DWF Toolkit).Buscar vértices únicos de una 'sopa triangular'
Sin embargo, mi pregunta es agnóstico plattform:
Dado:
He generado una malla como una lista de caras triangulares forman un modelo construido a través de mi solicitud. Cada triángulo se define a través de tres vértices, que consisten en tres flotantes (x, y & coordenada z). Como los triángulos forman una malla, la mayoría de los vértices son compartidos por más de un triángulo.
Objetivo:
Necesito encontrar la lista de vértices únicas, y para generar una serie de caras que consta de tuplas de tres índices en esta lista.
Lo que quiero hacer es esto:
//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)
Aunque tengo una aplicación que hace esto, paso 1 (la generación de la lista de vértices únicas) es muy lento en el orden de O (n !), ya que cada vértice se compara con todos los vértices que ya están en la lista. Pensé: "Oye, permitamos construir un hashmap de los componentes de mis vértices usando std :: map, ¡eso debería acelerar las cosas!", Solo para descubrir que generar una clave única a partir de tres valores de punto flotante no es una tarea trivial.
Aquí entran en juego los expertos de stackoverflow: necesito algún tipo de función hash que funcione con 3 flotadores o cualquier otra función que genere un valor único desde una posición de vértice 3d.
¿Cuán robusta debe ser esta singularidad de vértice? Quiero decir, ¿estás tratando de ahorrar espacio o necesitas una topología muy robusta? Supongamos que los vértices Va y Vb obtienen diferentes identificadores pn y pq, pero en realidad son realmente lo mismo, ¿es eso un factor decisivo? – Tarydon
Sí, sería porque estoy tratando de exportar mallas de Topología. Si un solo vértice de la fuente existiría varias veces en el destino, los triángulos que se constriñen de él no compartirían el borde; la topología podría abrirse. – sum1stolemyname