19 votos

¿Encontrar la línea central del túnel?

Tengo algunos archivos de mapas que consisten en "polilíneas" (cada línea es sólo una lista de vértices) que representan túneles, y quiero tratar de encontrar la "línea central" del túnel (que se muestra, aproximadamente, en rojo a continuación).

alt text

He tenido algún éxito en el pasado usando Triangulación de Delaunay pero me gustaría evitar ese método ya que (en general) no permite modificar fácilmente/con frecuencia los datos de mis mapas.

¿Alguna idea de cómo podría hacerlo?

Estoy trabajando en C++ bastante crudo.

0 votos

gis.stackexchange.com/q/177/162 también se ocupa de lo que usted busca: algoritmos de esqueletización .

3 votos

Creo que el enlace cruzado con el SO es relevante ya que allí también hay respuestas stackoverflow.com/questions/3983613/find-tunnel-center-line

0 votos

@julien: Ya enlazaste eso en tu respuesta. Lo he leído, pero no responde a mi pregunta concreta (que, para decirlo de otra manera, es: "Ya sé cómo encontrar el MAT, pero me pregunto si alguien conoce un método que no sea el de Delaunay "). algoritmo (es decir, no una librería - el problema no es mi codificación ;)] que sea eficiente para los cambios localizados"). Hubo una respuesta en SO que tampoco respondía del todo, pero me costó mucho esfuerzo y me dio mucho que pensar, así que le he concedido el cheque a ese tipo hasta que aparezca algo mejor. Ninguna de las respuestas siguientes es tan buena (lo que puede ser culpa mía).

6voto

cjstehno Puntos 131

Has dibujado una buena aproximación a la Transformada del Eje Medio. En efecto, la triangulación de Delaunay ofrece una buena aproximación a la misma. (El principal reto es que partes de la TAM son trozos de parábolas, no sólo segmentos de línea).

He encontrado referencias al código de trabajo (normalmente en C/C++, recuerdo) en la literatura académica. Haz una búsqueda en Google Scholar y busca más antiguo (los más recientes parecen centrarse en los cálculos en 3D).

0 votos

Tengo un código que funciona, usando Delaunay. Realmente estoy preguntando si hay otras maneras.

1 votos

@sje397 En primer lugar, Delaunay sólo resuelve el problema de forma aproximada, así que sólo por eso puede merecer la pena investigar un código mejor. En segundo lugar, efectivamente hay otras formas. Puedo esbozar dos brevemente: (1) buscar el TMA mediante buffers internos y (2) realizar el análisis del terreno sobre la malla de distancia euclidiana de las polilíneas. No he mencionado ninguno de los dos porque ambos son mucho más ineficaces y dan peores resultados. Es posible que el segundo método se preste a una solución dinámica razonablemente rápida.

4voto

tobes Puntos 19

Puede que merezca la pena investigar los "esqueletos poligonales".

Hay algunos ejemplos de fuentes C++ en http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/Straight_skeleton_2/Chapter_main.html

0 votos

Gracias Underdark. Investigaré más a fondo la CGAL. Pero el requisito de que el recálculo no sea costoso cuando los datos de mi mapa cambian es la dificultad.

0 votos

CGAL es bastante rápido - un cálculo sobre la marcha debería ser posible. Si no, podrías echar un vistazo a las llamadas "estructuras de datos cinéticos": cgal.org/Manual/3.3/doc_html/cgal_manual/

0 votos

El "esqueleto" es otro término para la TMA. En mi experiencia, la búsqueda de "transformación del eje medial" ha dado más y mejores resultados que las búsquedas de "esqueleto".

0voto

Paul G Puntos 1615

Esta pregunta también se ocupan de lo que usted busca: algoritmos de esqueletización .

Echa un vistazo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X