Ejemplo: diagrama de Voronoi.

Como ejemplo, el código del cuadro 3.2, tomado de la documentación de CGAL, recorre los bordes3.5 de una triangulación de Delaunay y examina si corresponden a segmentos finitos del diagrama dual de Voronoi o a segmentos infinitos, devolviendo el número total de los dos tipos.

Comienza con una cabecera que incluye el código necesario mediante comandos |#include| y sigue con una serie de |typedef| que son básicamente ``alias'' y se introducen por aligerar el código (por ejemplo, en la primera línea de este tipo ``|K|'' sustituye a la expresión tan larga que tiene a su izquierda).

En la función principal, |main()|, se crea una triangulación de Delaunay. La manera en que se hace puede resultar algo oscura, pero consiste tan sólo en ``cebar'' el archivo con las coordenadas cartesianas, de nombre |data/voronoi.cin|, a la función |insert|, que es miembro de los objetos de tipo |Triangulation|.

Una vez la triangulación está creada (no tenemos por qué saber los detalles de esta construcción), podemos acceder a sus propiedades. En este ejemplo, se recorren todos los bordes de la triangulación mediante el iterador |eit|. Fijémonos que, en el bucle |for| se crea este iterador, haciéndolo inicialmente igual que el ``primer'' borde (no sabemos cuál es, realmente) y se hace que vaya recorriendo todos los bordes (mediante el operador |++| hasta que se pasa del ``último''.

Lo contenido dentro del bucle es quizá más difícil de entender, ya que la función |dual| devuelve un objeto genérico, debido justamente a que el segmento dual de un borde puede ser o bien un segmento finito o una semirecta (o ``rayo''). La función |object_cast| es la que discrimina cuál caso es el apropiado; dependiendo del resultado se incrementa el contador |ns| o |nr|.

Convengamos que, aparte de algunas dificultades técnicas como las descritas en el párrafo anterior, la utilización de este tipo de códigos es mucho más sencilla que iniciar un desarrollo de cero de estas rutinas geométricas. De hecho, los cálculos de las expresiones que aparecen en el capítulo 5 no son, conceptualmente, mucho más complicados que el ejemplo que se ha descrito.


Tabla: Cálculo de propiedades de un diagrama de Voronoi mediante las rutinas CGAL.
\begin{table}\begin{center}
\begin{framed}
\begin{lstlisting}
...


Daniel Duque 2011-11-10