Articulo de referencia

Triangulación de polígonos

Triangulación de polígonos En geometría computacional , la triangulación de polígonos es la partición de un área poligonal ( polígono simple ) P en un conjunto de triángulos , [...

Triangulación de polígonos

En geometría computacional , la triangulación de polígonos es la partición de un área poligonal ( polígono simple ) P en un conjunto de triángulos , [ 1 ] es decir, encontrar un conjunto de triángulos con interiores que no se intersecan por pares cuya unión es P.

Las triangulaciones pueden considerarse casos especiales de grafos planos de líneas rectas . Cuando no hay agujeros ni puntos añadidos, las triangulaciones forman grafos exteriores planos máximos .

Triangulación de polígonos sin vértices adicionales

Con el tiempo, se han propuesto diversos algoritmos para triangular un polígono.

Triangulación de polígonos convexos

Las 42 triangulaciones posibles para un heptágono convexo (polígono convexo de 7 lados). Este número viene dado por el quinto número de Catalan .

Es trivial triangular cualquier polígono convexo en tiempo lineal para obtener una triangulación en abanico , añadiendo diagonales desde un vértice a todos los demás vértices que no son vecinos más cercanos.

El número total de formas de triangular un n- gono convexo mediante diagonales que no se intersecan es el ( n -2)-ésimo número de Catalan , que es igual a

norte(norte+1)...(2norte4)(norte2)¡{\displaystyle {\frac {n(n+1)...(2n-4)}{(n-2)!}}},

una fórmula hallada por Leonhard Euler . [ 2 ]

Método de recorte de orejas

Un polígono triangulado, con una oreja sombreada.

Una forma de triangular un polígono simple se basa en el teorema de las dos orejas , que establece que cualquier polígono simple con al menos 4 vértices sin agujeros tiene al menos dos " orejas ", que son triángulos cuyos dos lados son los bordes del polígono y el tercero está completamente dentro de él. [ 3 ] El algoritmo consiste entonces en encontrar una de estas orejas, eliminarla del polígono (lo que da como resultado un nuevo polígono que aún cumple las condiciones) y repetir el proceso hasta que solo quede un triángulo.

Este algoritmo es fácil de implementar, pero más lento que otros, y solo funciona en polígonos sin agujeros. Una implementación que mantenga listas separadas de vértices convexos y cóncavos se ejecutará en tiempo O( ) . Este método se conoce como recorte de orejas y, a veces, recorte de orejas . Hossam ElGindy, Hazel Everett y Godfried Toussaint descubrieron un algoritmo eficiente para recortar orejas . [ 4 ]

Triangulación de polígonos monocromáticos

Un polígono simple es monótono con respecto a una línea L si cualquier línea ortogonal a L interseca el polígono como máximo dos veces. Un polígono monótono se puede dividir en dos cadenas monótonas . Un polígono que es monótono con respecto al eje y se llama y-monótono . Un polígono monótono con n vértices se puede triangular en tiempo O( n ) . Suponiendo que un polígono dado es y-monótono, el algoritmo voraz comienza recorriendo una cadena del polígono de arriba a abajo mientras agrega diagonales siempre que sea posible. [ 1 ] Es fácil ver que el algoritmo se puede aplicar a cualquier polígono monótono.

Un polígono monótono puede triangularse en tiempo lineal con el algoritmo de A. Fournier y DY Montuno, [ 5 ] o con el algoritmo de Godfried Toussaint . [ 6 ]

Triangulación de un polígono no monótono

Dividir un polígono en polígonos monocromáticos

Si un polígono no es monótono, se puede particionar en subpolígonos monótonos en tiempo O( n log n ) utilizando un método de barrido lineal . El algoritmo no requiere que el polígono sea simple, por lo que se puede aplicar a polígonos con agujeros . En general, este algoritmo puede triangular una subdivisión plana con n vértices en tiempo O( n log n ) utilizando espacio O( n ) . [ 1 ]

Gráfico dual de una triangulación

Un grafo útil que suele asociarse a la triangulación de un polígono P es el grafo dual . Dada una triangulación T P de P , se define el grafo G ( T P ) como aquel cuyos vértices son los triángulos de T P , siendo dos vértices (triángulos) adyacentes si y solo si comparten una diagonal. Es fácil observar que G ( T P ) es un árbol con grado máximo 3.

Complejidad computacional

Hasta 1988, la triangulación de un polígono simple en un tiempo inferior a O( n log n ) era un problema abierto en geometría computacional. [ 1 ] Luego, Tarjan y Van Wyk (1988) descubrieron un algoritmo de triangulación con un tiempo de O( n log log n ) , [ 7 ] posteriormente simplificado por Kirkpatrick, Klawe y Tarjan (1992) . [ 8 ] Posteriormente surgieron varios métodos mejorados con una complejidad de O( n log * n ) (en la práctica, indistinguible del tiempo lineal ). [ 9 ] [ 10 ] [ 11 ]

Bernard Chazelle demostró en 1991 que cualquier polígono simple puede triangularse en tiempo lineal, aunque el algoritmo propuesto es muy complejo. [ 12 ] También se conoce un algoritmo aleatorio más simple con tiempo esperado lineal. [ 13 ]

El algoritmo de descomposición de Seidel [ 10 ] y el método de triangulación de Chazelle se discuten en detalle en Li y Klette (2011) . [ 14 ]

La complejidad temporal de la triangulación de un polígono de n vértices con agujeros tiene una cota inferior de Ω( n log n ) en los modelos de árbol de computación algebraica. [ 1 ] Es posible calcular el número de triangulaciones distintas de un polígono simple en tiempo polinomial usando programación dinámica y (basándose en este algoritmo de conteo) generar triangulaciones aleatorias uniformes en tiempo polinomial. [ 15 ] Sin embargo, contar las triangulaciones de un polígono con agujeros es #P-completo , lo que hace improbable que se pueda hacer en tiempo polinomial. [ 16 ]

Véase también

Referencias

  1. 1 2 3 4 5 Mark de Berg , Marc van Kreveld , Mark Overmars y Otfried Schwarzkopf (2000), "3: Triangulación de polígonos", Geometría computacional (2ª  ed.), Springer-Verlag , págs. 45-61 , ISBN  3-540-65620-0{{citation}}: CS1 maint: varios nombres: lista de autores ( enlace )
  2. Pickover, Clifford A. (2009), El libro de matemáticas , Sterling, pág. 184 
  3. Meisters, Gary Hosler (1975), "Los polígonos tienen orejas" , American Mathematical Monthly , 82 (6): 648– 651, doi : 10.2307/2319703 , JSTOR 2319703 
  4. ElGindy, Hossam; Everett, Hazel; Toussaint, Godfried T. (1993), "Cortando una oreja usando el método de poda y búsqueda", Pattern Recognition Letters , 14 (9): 719– 722, Bibcode : 1993PaReL..14..719E , doi : 10.1016/0167-8655(93)90141-y
  5. Fournier, Alain ; Montuno, Delfin Y. (1984), "Triangulación de polígonos simples y problemas equivalentes", ACM Transactions on Graphics , 3 (2): 153–174 , doi : 10.1145/357337.357341 , ISSN 0730-0301 , S2CID 33344266  
  6. Toussaint, Godfried T. (1984), "Un nuevo algoritmo lineal para la triangulación de polígonos monótonos", Pattern Recognition Letters , 2 (3): 155– 158, Bibcode : 1984PaReL...2..155T , doi : 10.1016/0167-8655(84)90039-4
  7. Tarjan, Robert E. ; Van Wyk, Christopher J. (1988), "Un algoritmo de tiempo O( n log log n ) para triangular un polígono simple", SIAM Journal on Computing , 17 (1): 143– 178, CiteSeerX 10.1.1.186.5949 , doi : 10.1137/0217010 , MR 0925194  
  8. Kirkpatrick, David G. ; Klawe, Maria M. ; Tarjan, Robert E. (1992), "Triangulación de polígonos en tiempo O( n log log n ) con estructuras de datos simples", Discrete & Computational Geometry , 7 (4): 329– 346, doi : 10.1007/BF02187846 , MR 1148949 
  9. Clarkson, Kenneth L. ; Tarjan, Robert ; van Wyk, Christopher J. (1989), "Un algoritmo rápido de Las Vegas para triangular un polígono simple", Discrete & Computational Geometry , 4 (5): 423– 432, doi : 10.1007/BF02187741
  10. 1 2 Seidel, Raimund (1991), "Un algoritmo aleatorio incremental simple y rápido para calcular descomposiciones trapezoidales y para triangular polígonos", Geometría Computacional , 1 : 51–64 , CiteSeerX 10.1.1.55.5877 , doi : 10.1016/0925-7721(91)90012-4 
  11. Clarkson, Kenneth L .; Cole, Richard; Tarjan, Robert E. (1992), "Algoritmos paralelos aleatorios para diagramas trapezoidales", International Journal of Computational Geometry & Applications , 2 (2): 117– 133, doi : 10.1142/S0218195992000081 , MR 1168952 
  12. Chazelle, Bernard (1991), "Triangulación de un polígono simple en tiempo lineal", Discrete & Computational Geometry , 6 (3): 485– 524, doi : 10.1007/BF02574703 , ISSN 0179-5376 
  13. Amato, Nancy M. ; Goodrich, Michael T. ; Ramos, Edgar A. (2001), "Un algoritmo aleatorio para triangular un polígono simple en tiempo lineal", Discrete & Computational Geometry , 26 (2): 245– 265, doi : 10.1007/s00454-001-0027-x , ISSN 0179-5376 
  14. ^ Li, Fajie; Klette, Reinhard (2011), Los caminos euclidianos más cortos , Springer , doi : 10.1007/978-1-4471-2256-2 , ISBN 978-1-4471-2255-5
  15. Epstein, Peter; Sack, Jörg-Rüdiger (1994), "Generación de triangulaciones aleatorias", ACM Transactions on Modeling and Computer Simulation , 4 (3): 267– 278, doi : 10.1145/189443.189446 , S2CID 14039662 
  16. Eppstein, David (2019), "Contar triangulaciones de polígonos es difícil", Actas del 35.º Simposio Internacional de Geometría Computacional , Actas Internacionales Leibniz en Informática (LIPIcs), vol. 129, Schloss Dagstuhl, pp. 33:1–33:17, arXiv : 1903.04737 , doi : 10.4230/LIPIcs.SoCG.2019.33 , ISBN   9783959771047, S2CID 75136891 
  • Demostración en formato Flash SWF : un algoritmo de línea de barrido.
  • Explicación de Song Ho sobre el teselador GLU de OpenGL.