# Triangulación de Delaunay

Una triangulación de Delaunay (pronunciado /dəlo'ne/, a veces escrito fonéticamente «Deloné»), es una red de triángulos conexa y convexa que cumple la condición de Delaunay. Esta condición dice que la circunferencia circunscrita de cada triángulo de la red no debe contener ningún vértice de otro triángulo. Las triangulaciones de Delaunay tienen importante relevancia en el campo de la geometría computacional, especialmente en gráficos 3D por computadora.
Se le denomina así por el matemático ruso Borís Nikolaevich Delone quien lo ideó en 1934; el mismo Delone usó la forma francesa de su apellido, «Delaunay», como apreciación a sus antecesores franceses.

## Condición de Delaunay

La condición de Delaunay de un triángulo establece que la circunferencia circunscrita del mismo no debe contener ningún otro vértice de la triangulación en su interior, aunque sí se admiten vértices situados sobre la circunferencia.
Se dice que una red de triángulos es una triangulación de Delaunay si todos los triángulos de la misma cumplen la condición de Delaunay. Es decir, que cada circunferencia circunscrita de cada triángulo no contiene vértices de la triangulación en su interior. Esta definición original para espacios bidimensionales se puede ampliar a espacios tridimensionales o incluso dimensiones superiores, usando la esfera circunscrita en vez de la circunferencia circunscrita.

## Propiedades de la triangulación de Delaunay

Las triangulación de Delaunay de un conjunto de puntos cumple las siguientes propiedades:
* La frontera externa de triangulación forma la envolvente convexa del conjunto de puntos.
* El ángulo mínimo dentro de todos los triángulos está maximizado, es decir, se evita obtener resultados con ángulos demasiado agudos.
* Como consecuencia de lo anterior, los triángulos generados en una triangulación de Delaunay tienden a ser lo más equiláteros posible. Esto se debe a que todo triángulo no equilátero siempre tiene algún ángulo menor que 60°.
* La triangulación de Delaunay es unívoca salvo en casos donde los vértices presentan una alineación perfecta. Por ejemplo, en caso de los vértices estén situados en una rejilla equidistante, o sean vértices de un polígono regular. En estos casos, aparecerán circunferencias circunscrita con más que tres vértices y será necesario decidir entre varias posibles decisiones.
* El grafo de Gabriel es un subgrafo de las aristas de la triangulación de Delaunay. Es decir, todas las aristas del grafo de Gabriel pertenecen a algún triángulo de la triangulación.
* El grafo del vecino más cercano es un subgrafo de las aristas de la triangulación de Delaunay. Es decir, todas las aristas del grafo del vecino más cercano pertenecen a algún triángulo de la triangulación.
* Como consecuencia de lo anterior, cada punto del conjunto de entrada tendrá una arista que lo une con su punto más cercano.
* La triangulación de Delaunay y el diagrama de Voronoi de una serie de puntos son grafos duales, por lo que la construcción de uno es trivial a partir del otro. En este sentido, los circuncentros de los triángulos de Delaunay coinciden con los vértices de las regiones del diagrama de Voronoi. Dos vértices del diagrama de Voronoi estarán conectados si sus triángulos de Delaunay correspondientes son vecinos entre sí.
* En un grafo construido a partir de las aristas de la triangulación de Delaunay, el camino más corto entre dos puntos nunca será mayor que ${\frac {4\pi }{3{\sqrt {3}}}}\approx 2.418$veces la distancia euclídea entre ellos.
La propiedad de la triangulación de Delaunay de maximizar los ángulos interiores de los triángulos es especialmente práctica en geometría computacional porque evita errores de redondeo que pueden aparecer al realizar cálculos con triangulaciones arbitrarias donde pueden aparecer ángulos demasiado pequeños.

## Algoritmos de cálculo de la Triangulación de Delaunay

Existen varias posibles estrategias para calcular la triangulación de Delaunay a partir de un conjunto de puntos de entrada.

### Test robusto de pertenencia al interior de una circunferencia

Vista la definición de la Condición de Delaunay, es importante realizar la comprobación de si un vértice está dentro de una circunferencia circunscrita o no de forma eficiente.
Por supuesto es posible calcular el radio y las coordenadas del circuncentro de la circunferencia circunscrita a un triángulo, y después examinar si el vértice está dentro de la circunferencia calculando la distancia al centro, pero hay un test eficiente basado en el determinante de una matriz.
En dos dimensiones. Si los tres puntos A, B y C forman un triángulo —con los puntos denominados en sentido contrario al de las agujas del reloj—, el punto D está dentro de su circunferencia circunscrita si y sólo si:
${\begin{vmatrix}A_{x}&A_{y}&A_{x}^{2}+A_{y}^{2}&1\\B_{x}&B_{y}&B_{x}^{2}+B_{y}^{2}&1\\C_{x}&C_{y}&C_{x}^{2}+C_{y}^{2}&1\\D_{x}&D_{y}&D_{x}^{2}+D_{y}^{2}&1\end{vmatrix}}={\begin{vmatrix}A_{x}-D_{x}&A_{y}-D_{y}&(A_{x}-D_{x})^{2}+(A_{y}-D_{y})^{2}\\B_{x}-D_{x}&B_{y}-D_{y}&(B_{x}-D_{x})^{2}+(B_{y}-D_{y})^{2}\\C_{x}-D_{x}&C_{y}-D_{y}&(C_{x}-D_{x})^{2}+(C_{y}-D_{y})^{2}\\\end{vmatrix}}>0$
Es decir, si el determinante de este matriz es mayor que 0. En este caso es suficiente conocer el signo aritmético, así que este cómputo puede ser acelerado fácilmente.

### Algoritmo de fuerza bruta

El algoritmo más trivial para calcular la triangulación de Delaunay es mediante una búsqueda de fuerza bruta, que consiste en generar todas las combinaciones posibles de tres puntos del conjunto de entrada, y comprobar si algún otro punto del conjunto de entrada está en el interior de la circunferencia que pasa por dicha terna de puntos. Si la circunferencia no contiene ningún punto, podemos asegurar que la terna forma un triángulo que pertenece a la triangulación de Delaunay. Este algoritmo, aunque de implementación trivial, tiene un orden $O(n^{4})$ lo que lo hace inviable salvo que el conjunto de entrada sea de unos pocos puntos.

### Algoritmos de giro de aristas

Este algoritmo (o familia de algoritmos) comienza creando una triangulación cualquiera de los puntos de entrada y recorre todas las aristas internas revisando si el par de triángulos adyacentes a la arista cumple la condición de Delaunay de forma aislada. De no ser así, se aplica una operación de giro de arista, de forma que va introduciendo la condición de Delaunay poco a poco en la triangulación. Desafortunadamente, el proceso puede tomar O(n$^2$) giros de arista y solamente está asegurada su convergencia para triangulaciones en 2 dimensiones.

#### La operación de giro de aristas (Flipping)

Para un par de triángulos adyacentes con una arista en común, es posible demostrar que ambos triángulos cumplen la condición de Delaunay si (y sólo si) la suma de los ángulos opuestos a la arista común es menor o igual a 180°.
Esta propiedad nos permite definir una operación geométrica importante denominada Giro de arista (o flipping en inglés). Si los dos triángulos no cumplen la condición de Delaunay, podemos reemplazar la arista común por una nueva arista que una los vértices opuestos a la anterior. El resultado es un nuevo par de triángulos con la misma frontera que el par de triángulos original, pero que sí cumplen la condición de Delaunay.
* Este par de triángulos no cumple la condición de Delaunay.
* El giro de la arista común produce un nuevo par de triángulos que sí cumple la condición de Delaunay.

### Algoritmo incremental de Bowyer-Watson

El Algoritmo de Bowyer-Watson es un método incremental donde se añaden los vértices a una triangulación de Delaunay trivial que es corregida en cada paso para mantener la condición de Delaunay.
Hay varias posibilidades para seleccionar el vértice siguiente, incidentalmente, ordenado por una coordenada o usando un árbol. La selección del vértice siguiente tiene una gran influencia en el tiempo de ejecución del algoritmo.

### Algoritmos de barrido o Sweepline

Existe un algoritmo de tipo barrido (sweepline en inglés) publicado en 2005 por Borut Žalik para calcular directamente la triaángulación de Delaunay. Se basa en un principio similar a la construcción incremental: construir una pequeña parte de la triangulación final y después seguir añadiendo vértices en el orden en que son barridos por una recta hasta que la triangulación esté completa.
El algoritmo de Fortune es otro algoritmo de tipo barrido (sweepline en inglés) publicado por Steven Fortune en 1986 para calcular el diagrama de Voronoi, del cual puede extraerse fácilmente la triangulación de Delaunay.

### Algoritmo recursivo Divide y vencerás

Este algoritmo usa el principio conocido como divide y vencerás (divide and conquer en inglés): dividir el conjunto de puntos en dos partes de igual tamaño, calcular la triangulación de Delaunay para cada parte individualmente y después reunir las dos triangulaciones corrigiendo los errores.
La idea de usar el principio divide y vencerás para computar un diagrama de Voronoi en dos dimensiones fue introducida en 1975. La idea fue revisada en 1980 para computar la triangulación de Delaunay y mejorada por Guibas y Stolfi in 1985. En 1986 Dwyer presentó una modificación que mejoró la cota ajustada asintótica y en 1992 Leach presentó otra aceleración del método. En 1997 Cigoni, Montani y Scopigno presentaron el algoritmo DeWall, que hace posible el cálculo de una triangulación de Delaunay usando divide and conquer para cualquier número de dimensiones.
Usando el algoritmo más avanzado, ese método resulta en una cota superior asintótica de O(n log n) y una cota ajustada asintótica de O(n log (log n)); en algunos casos especiales es posible reducir la cota ajustada a la cota superior. Se ha demostrado que la técnica divide y vencerás es la más rápida en generar la triangulación de Delaunay.