¿Cómo triangular desde un diagrama de Voronoï?


13

Calculé un diagrama de Voronoï a partir de un conjunto de puntos (con Boost.polygon ).

Intento encontrar una triangulación de Delaunay, conectando cada centro celular para cada borde Voronoï, pero echo de menos algunos bordes.

En la siguiente imagen, los puntos rojos son mis puntos iniciales, las líneas azules son los bordes de Voronoï (ignoré los bordes infinitos), y las líneas verdes son los bordes de triangulación (un borde verde para cada borde azul, conectando dos orígenes de celdas).

Podemos ver que faltan bordes diagonales. ¿Qué me estoy perdiendo?

diagrama de voronoi

Respuestas:


19

El punto central en su diagrama es un borde degenerado del diagrama de Voronoi. Si genera un diagrama de Voronoi para una nube de puntos irregular, cada vértice tendrá grado 3. Un vértice con grado 4 (o más) solo puede ocurrir cuando coinciden dos (o más) vértices. Eso significa que hay un borde de longitud cero entre ellos. Pero ese borde aún debe tener un borde correspondiente en la triangulación de Delaunay. El problema es que es arbitrario cuál de los dos bordes posibles elige, porque el borde de longitud cero no tiene una dirección asociada.

Para visualizar de lo que estoy hablando, considere comenzar con cuatro puntos menos espaciados regularmente (de modo que comencemos con solo vértices de grado 3) y traducirlos gradualmente a sus posiciones regulares.

Podemos hacer esto de dos maneras diferentes, que conducen al caso degenerado en su diagrama. Verá que termina con dos triangulaciones de Delaunay diferentes, que son límites válidos para el caso degenerado:

ingrese la descripción de la imagen aquíingrese la descripción de la imagen aquí

Supongo que a su código le falta este caso degenerado por una razón u otra, pero sin ver realmente cómo calcula la triangulación de Delaunay desde el diagrama de Voronoi, es imposible señalarlo más allá de esto.

También tenga en cuenta que tener degeneraciones aún mayores (en más de cuatro puntos distribuidos en ángulos iguales alrededor de un círculo) probablemente requeriría atención adicional:

ingrese la descripción de la imagen aquíingrese la descripción de la imagen aquí

Estas animaciones también muestran que (incluso en un caso no degenerado), los bordes correspondientes de Voronoi y Delaunay no se cruzan necesariamente dentro de su extensión finita. Eso podría dificultar ver que los 2 (o 3) bordes que triangulan el polígono regular al final en realidad corresponden a varios bordes degenerados que están todos en el centro. También tenga en cuenta que en total hay 5 triangulaciones diferentes del pentágono y 14 triangulaciones del hexágono (aunque no sé si las 14 pueden obtenerse deformando una triangulación no degenerada).

Editar (por OP)

Los diagramas de Voronoi calculados con Boost.polygon permiten caminar a través de cada vértice de Voronoi y cada borde vinculado a esos vértices (en sentido horario o antihorario). De esta manera, es posible crear un triángulo para cada par de bordes (dos bordes conectados se unirán a 3 celdas).


Puede responder aquí también o eliminaré mi otra pregunta.
arthur.sw

3
@ arthur.sw La publicación cruzada generalmente se desaconseja en SE, por lo que supongo que eliminarla sería la mejor opción.
Martin Ender

un creador de diagramas de voronoï interactivo: alexbeutel.com/webgl/voronoi.html
arthur.sw

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.