Algoritmo de Greiner-Hormann

El algoritmo de Greiner-Hormann es utilizado en computación gráfica para recortar polígonos.[1]​ Es más eficiente que el algoritmo de Vatti, pero no puede gestionar eventuales casos degenerados.[2]​ Puede sin embargo utilizarse con polígonos que se auto-intersectan sin ser convexos. Puede fácilmente ser generalizado con el fin de efectuar otras operaciones booleanas sobre polígonos, tales que la unión y la diferencia.

Ejemplo de polígonos que se intersectan.

El algoritmo está basado en la definición del "interior" de un polígono, ella misma basada en la noción de índice. Considera las regiones de índice par como interiores al polígono: esto es conocido también con el nombre de regla par-impar. El algoritmo toma dos listas de polígonos como entrada, cada polígono representado como una lista de cumbres conectadas.

Ejemplo de auto-intersección.

En su formulación inicial, el algoritmo se divide en tres fases :

  • En la primera fase, se calculan las intersecciones entre los lados de los polígonos. Las cumbres son añadidos a los puntos de intersección, y a cada uno se la agrega un apuntador hacia su homólogo del otro polígono.
  • En la segunda fase, se marca cada intersección sea como una intersección de entrada, o como una intersección de salida. Esta decisión se toma aplicando la regla par-impar a la primera cumbre, después atravesando el polígono alternando las marcas (a una intersección de entrada tiene que seguir una intersección de salida).
  • En la tercera y última fase, se genera el resultado. El algoritmo arranca de una intersección no tratada y escoge la dirección del recorrido del polígono, sobre la base de las marcas de entrada o salida: para una intersección de entrada, se atraviesa hacia adelante, y para una intersección de salida, atraviesa en sentido inverso. Se añaden las cumbres al resultado hasta que otra intersección sea encontrada; a continuación, el algoritmo se ocupa de la intersección correspondiente en el otro polígono y va a escoger nuevamente una dirección de recorrido, según la misma regla. Si la intersección siguiente ya ha sido tratada, el algoritmo se detiene para esta parte de la salida, y recomienza para las intersecciones no tratadas. La salida queda totalmente determinada cuando ya no quedan intersecciones sin tratar.

El algoritmo no se limita a los polígonos, y puede también bien tratar segmentos de curvas paramétricas.

Un de los inconvenientes mayores del algoritmo original es que no se ocupa de los casos degenerados, tales que las cumbres duplicadas o las auto-intersecciones tomando en cuenta una sola cumbre. La publicación original sugiere modificar ciertas cumbres para retirar los casos degenerados.

Véase también

Referencias

  1. Greiner, Günther & Kai Hormann (abril de 1998). «Efficient clipping of arbitrary polygons». Journal ACM Transactions on Graphics 17 (2): 71-83. 
  2. Ionel Daniel Stroe. «Efficient Clipping of Arbitrary Polygons». Consultado el 17 de mayo de 2014. 

Enlaces externos