Triangulação de Delauney
Um pedaço da superfície terrestre é chamado de terreno. Um terreno é uma
superfície 2-dimensional em um espaço 3-dimensional com uma propriedade especial:
cada linha vertical intercepta o terreno em um ponto. Formalmente, um terreno é um
grafo da função
que atribui uma altura f(p) para cada ponto p no
domínio, A, do terreno. A representação (virtual) do terreno (real) em forma de
estrutura de dados, segundo os valores da função f, é chamada de malha. Quando
unimos cada três pontos vizinhos de uma malha, de forma a representá-la por
triângulo, chamamos essa malha de malha triangular. Uma vez que a terra é redonda,
em uma escala global, esta maneira de definir a terra não é muito adequada. Mas, se
considerarmos uma escala local, essa ideia é uma boa aproximação para terrenos em
geral. Um terreno pode ser então visualizado como um desenho em perspectiva,
como mostrado na Figura 1.
Figura 1: Perspectiva de Visualização de um Terreno
Claro, não temos como saber a altura de cada ponto na superfície da terra; sabemos
apenas os valores de altura onde podemos medir. Isso significa que, quando nos
referimos acerca de algum terreno, nós sabemos apenas o valor da função f de um
conjunto finito pontos em
, que é apenas uma amostra de A. Usando a altura
em uma vizinhança, podemos inferir de alguma forma a altura de pontos que não
puderam ser medidos no domínio dentro dessa vizinhança. Entretanto, temos assim
apenas um terreno discreto, o que não parece muito natural. Assim, nossa abordagem
para aproximar um terreno por uma malha triangular é a seguinte: Inicialmente,
determinamos uma triangulação de P. Uma triangulação de P é uma subdivisão planar
cujas faces são triângulos, cujos vértices são os pontos de P. Então, levantamos cada
ponto de P até sua altura correta, mapeando assim cada triangulo na triangulação
como um triângulo no espaço 3-dimensional. A Figura 2 ilustra essa ideia:
Figura 2: Malha triangular: obtenção de um terreno poliedral a partir de uma amostra
de pontos P que aproximam um terreno.
O que é obtido no final é um terreno poliedral: um grafo de uma função contínua
linear. Assim, o terreno poliedral, chamada malha triangular, é usada como uma
aproximação do terreno original.
Resta uma questão: como triangular o conjunto de pontos P amostrados? De uma
maneira geral, isso pode ser feito de diversas maneiras. Mas qual triangulação é mais
apropriada para nossos objetivos; ou seja, para aproximar um terreno? Por maior e
melhor que tenha sido a captura dos pontos do terreno, não existe ainda nenhuma
resposta definitiva para essa questão, principalmente porque não conhecemos a altura
de cada ponto possível do terreno original, mas apenas em uma certa amostragem.
Uma vez que não conhecemos nenhuma outra informação, e a altura dos pontos
amostrados são as alturas corretas para qualquer triangulação, qualquer triangulação
pra P parece ser igualmente boa. No entanto, algumas triangulações parecem ser mais
naturais do que outras. Por exemplo, observe a Figura 3, que mostra duas
triangulações do mesmo conjunto de pontos. Observando somente as alturas dos
pontos amostrados, temos a impressão de que trata-se de uma montanha com um
certo cume. A triangulação (a) reflete esta ideia intuitiva. Por outro lado, a
triangulação (b), onde uma simples aresta foi flipada, parece ter introduzido um
grande vale exatamente no cume. Intuitivamente, a triangulação (b) parece errada.
Podemos, no entanto, assumir intuitivamente que a triangulação (a) é melhor do que a
triangulação (b)?
Figura 3: Alternando uma única aresta pode fazer uma grande diferença na
triangulação.
O problema com a triangulação (b) é que a altura do ponto q é determinada por dois
pontos que estão relativamente distantes um do outro. Isso acontece porque q está no
meio de uma aresta de dois triângulos com ângulos muito pequenos. As pequenas
espessuras desses triângulos são as causadoras desse problema. Então, intuitivamente,
parece que triangulações com menores ângulos são piores. Assim, ordenamos de
forma crescente as triangulações pelos seus ângulos para compará-las. Se os menores
ângulos de duas triangulações são idênticos, comparamos os dois próximos ângulos
nas sequencias ordenadas, e assim por diante. Uma vez que existe um número finito
de diferentes triangulações para cada amostra P, isso implica que deve haver uma
triangulação ótima, uma que maximiza os ângulos mínimos. Esta triangulação é aquela
que buscamos na construção de malhas triangulares.
Triangulação de Conjunto de Pontos Planares
Seja
um conjunto de n pontos no plano. Para definirmos
formalmente uma triangulação de P, inicialmente temos que definir subdivisão planar
máxima como sendo uma subdivisão de modo que nenhuma aresta conectando dois
vértices pode ser adicionada a sem destruir sua planalidade. Em outras palavras,
qualquer aresta que não está em intersecta uma das arestas que estão em . Assim,
definimos formalmente uma triangulação de P como sendo uma subdivisão planar
máxima cujos vértices são os pontos de P.
Com esta definição fica óbvio que uma triangulação existe. Mas ela consiste mesmo de
triângulos? A resposta é sim, para cada face interna (àquelas das bordas não-livres da
subdivisão), deve existir um triângulo: uma face externa (a de borda não-livre) forma
um polígono, e sabemos que qualquer polígono pode ser triangularizado. E com
relação às bordas internas? Não é difícil observar que qualquer aresta externa (aquelas
que pertencem à envoltória convexa de P) é uma aresta de qualquer triangulação de
P. O número de triângulos é o mesmo em qualquer triangulação de P. Isso também é
válido para o número de arestas. Mas o número exato, tanto de triângulos quanto de
arestas depende do número de elementos de P que pertencem à sua envoltória
convexa. Isso é dado pelo seguinte teorema:
Teorema 1: Seja P um conjunto de n pontos no plano, nem todos colineares, e seja h o
número de pontos em P que pertencem à envoltória convexa de P. Qualquer
triangulação de P possui 2n-h-2 triângulos e 3n-3-h arestas.
A prova desse teorema está na referência [1].
Seja uma triangulação de P, e suponha que possua m triângulos. É fácil ver que o
número de ângulos internos de
é 3m. Considere que esses 3m ângulos são
ordenados de forma crescente. Seja
essa sequencia de ângulos
ordenados;
então
para
qualquer
.
Denotamos
por
( )
(
) o vetor de ângulos de . Seja
uma nova triangulação de
(
) seu vetor de ângulos. Dizemos que a triangulação
P, e seja ( )
é melhor que a triangulação
se ( ) é lexicograficamente maior do que ( ).
Em outras palavras, se existe um índice i, com
, de modo que:
para todo
e
. Essa ideia é denotada como ( )
( ).
Definição Formal de Triangulação de Delauney: Uma triangulação
de P é dita ser
de Delauney se, para qualquer outra triangulação
e P ( )
( ).
Computando a Triangulação de Delauney
Vimos até agora que, para nossos objetivos ── aproximar um terreno por uma malha
triangular, cujos vértices são os pontos de um conjunto P, que por sua vez é uma
amostra dos pontos do terreno ── a triangulação de Delauney de P é uma boa
aproximação com boas chances de ficar boa. Vimos que a razão disso é porque a
triangulação de Delauney maximiza os ângulos mínimos. Então como computar a
triangulação de Delauney?
A estratégia usada aqui é aleatória e incremental. Inicialmente, construímos um
grande triângulo que contem todos os pontos de P para evitar problemas nas bordas
do conjunto P. À luz dessa ideia, construímos um grande triângulo cujos vértices são
. O uso aqui de índices negativos para os vértices é para poder diferenciálos que qualquer ponto em P. Isso significa que
e
são vértices especiais.
Após a obtenção da triangulação de Delauney para o conjunto
,a
triangulação de Delauney de P é obtida descartando-se os pontos
e todas
as suas arestas ligadas à P. Para que essa estratégia funcione corretamente,
escolhemos
como sendo valores os maiores possíveis, de modo que
nenhuma
aresta
do
triângulo
formado
por
intercepte qualquer aresta da triangulação de Delauney para P. A Figura 4 mostra um
exemplo:
Figura 4: Configuração inicia para triangulação de Delauney
Uma vez definido o triângulo
, o algoritmo vai adicionando aleatoriamente
cada ponto de P ao mesmo tempo que vai mantendo a propriedade de Delauney para
cara triangulação corrente. Considere que em algum momento foi adicionado um
ponto
. Primeiro, procuramos pelo triângulo da triangulação que está sendo
construída onde
caiu ── como isso será feito, será explicado mais tarde ──. Em
seguida, são adicionadas arestas de ao vértice do triângulo onde ele caiu. Se caiu
em uma aresta e da triangulação corrente, adicionamos arestas a partir de
para os
dois vértices opostos nos triângulos que compartilham a aresta e. A figura 5 ilustra
esses dois casos.
Figura 5: Configurações possíveis após a inserção do ponto pr na triangulação de
Delauney.
Assim, passamos a ter uma nova triangulação corrente, mas não necessariamente ela é
de Delauney, uma vez que as arestas adicionadas a partir de pode ter deixa algumas
arestas ilegais. Uma aresta ilegal é uma aresta que, se flipada dentro de um
quadrilátero, melhora a triangulação, caso contrário, a aresta é legal. Para verificar se
uma aresta é ilegal, chamamos um procedimento LegalizeAresta, que recebe cada
aresta potencialmente ilegal e a flipa se necessário. Este procedimento substitui
arestas ilegais por arestas legais através de flips de arestas. O Algoritmo para construir
a triangulação de Delauney a partir dessa ideia é dado a seguir:
REFERÊNCIAS:
[1] Esse material foi traduzido e adaptado por Paulo Sérgio Rodrigues do
livro: “Computational Geometry: Algorithms and Applications”, Segunda
Edição Revisada, dos autores Mark de Berg, Mark Van Kreveld, Mark
Overmars e Otfried Schwarzkopt, pela editora Springer. É para uso
restrito nas aulas de Computação Gráfica do Centro Universitário da FEI.
Download

Triangulação de Delauney - Centro Universitário FEI