Como triangular a partir de um diagrama de Voronoï?


13

Eu calculei um diagrama de Voronoï a partir de um conjunto de pontos (com Boost.polygon ).

Tento encontrar uma triangulação de Delaunay, conectando cada centro de célula para cada borda de Voronoï, mas sinto falta de algumas.

Na imagem a seguir, os pontos vermelhos são meus pontos iniciais, as linhas azuis são as bordas de Voronoï (eu ignorei as bordas infinitas) e as linhas verdes são as bordas da triangulação (uma borda verde para cada borda azul, conectando duas origens de célula).

Podemos ver que faltam arestas diagonais. o que estou perdendo?

diagrama de voronoi

Respostas:


19

O ponto central do seu diagrama é uma aresta degenerada do diagrama de Voronoi. Se você gerar um diagrama de Voronoi para uma nuvem de pontos irregular, todo vértice terá grau 3. Um vértice com grau 4 (ou mais) só pode acontecer quando dois (ou mais) vértices coincidem. Isso significa que há uma borda de comprimento zero entre eles. Mas essa aresta ainda deve ter uma aresta correspondente na triangulação de Delaunay. O problema é que é arbitrário qual das duas arestas possíveis você escolhe, porque a aresta de comprimento zero não tem direção associada.

Para visualizar do que estou falando, considere começar com quatro pontos espaçados menos regularmente (de modo que começemos com apenas vértices de grau 3) e gradualmente convertendo-os em suas posições regulares.

Podemos fazer isso de duas maneiras diferentes, que levam ao caso degenerado em seu diagrama. Você verá que termina duas triangulações diferentes de Delaunay, que são limites válidos para o caso degenerado:

insira a descrição da imagem aquiinsira a descrição da imagem aqui

Suponho que seu código esteja ausente neste caso degenerado por um motivo ou outro, mas sem realmente ver como você calcula a triangulação de Delaunay a partir do diagrama de Voronoi, é impossível apontar mais adiante.

Observe também que ter degenerescências ainda mais altas (em mais de quatro pontos distribuídos em ângulos iguais em torno de um círculo) provavelmente exigiria atenção adicional:

insira a descrição da imagem aquiinsira a descrição da imagem aqui

Essas animações também mostram que (mesmo em um caso não degenerado), as bordas correspondentes de Voronoi e Delaunay não se cruzam necessariamente na sua extensão finita. Isso pode dificultar a visualização de que as 2 (ou 3) arestas que triangulam o polígono regular no final correspondem a várias arestas degeneradas que estão todas no centro. Observe também que, no total, existem 5 triangulações diferentes do pentágono e 14 triangulações do hexágono (embora eu não saiba se todos os 14 podem ser obtidos através da deformação de uma triangulação não degenerada).

Editar (por OP)

Os diagramas de Voronoi calculados com Boost.polygon permitem percorrer cada vértice de Voronoi e cada aresta vinculada a esses vértices (no sentido horário ou anti-horário). Dessa maneira, é possível criar um triângulo para cada par de arestas (duas arestas conectadas serão vinculadas a 3 células).


Você pode responder aqui também ou vou excluir minha outra pergunta.
Arthur.sw

3
@ arthur.sw A postagem cruzada geralmente é desencorajada no SE, então suponho que excluí-la, seria a melhor opção.
Martin Ender

um criador interativo de diagrama voronoï: alexbeutel.com/webgl/voronoi.html
arthur.sw

Veja também stackoverflow.com/questions/34342038/… para obter o código
Giovanni Funchal
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.