fbpx
Wikipedia

Algoritmo de Bowyer-Watson

En geometría computacional, el Algoritmo de Bowyer–Watson es un método para calcular la triangulación de Delaunay de un conjunto finito de puntos en cualquier número de dimensiones. El algoritmo se puede emplear también para construir el Diagrama de Voronoi de los puntos, el cual es el grafo dual de dicha triangulación. El algoritmo es a veces denominado como Algoritmo de Bowyer o Algoritmo de Watson ya que ambos autores, Adrian Bowyer y David Watson, lo desarrollaron de forma independiente al mismo tiempo. Cada uno publicó un artículo sobre el mismo asunto en la revista The Computer Journal. [1][2]

Algoritmo de Bowyer–Watson
Tipo Geometría computacional
Problema que resuelve Triangulación de Delaunay / Diagrama de Voronoi
Estructura de datos Malla de Triángulos
Creador Adrian Bowyer y David Watson
Fecha 1981
Clase de complejidad P
Tiempo de ejecución
Peor caso
Caso promedio

Descripción del algoritmo

El algoritmo de Bowyer-Watson emplea un método incremental, donde se parte de una triangulación de Delaunay trivial (generalmente un triángulo o un par de triángulos que forman una caja contenedora) a la que se añaden uno a uno los puntos. Después de cada inserción, se eliminan aquellos triángulos cuyo circuncírculo contengan al punto recién introducido. El agujero resultante tiene forma de polígono estrellado simple, el cual puede ser retriangulado alrededor del punto recién insertado.

Si nuestra estructura de datos dispone de información de conectividad entre triángulos, el algoritmo tiene orden O(N log N) operaciones para triangular N puntos, a pesar de que existen casos degenerados especiales donde puede tomar O(N2). El orden en que se insertan los vértices tiene una gran influencia en el tiempo de ejecución del algoritmo, por lo que a veces se realiza una ordenación previa de los mismos acorde a una curva de Hilbert.[3]

Este algoritmo puede ser sensible a datos de entrada degenerados, como puntos situados en patrones regulares que hacen que la resolución de si un punto está dentro o fuera del circuncírculo de un triángulo dependa de decimales por debajo del umbral de precisión de la representación en coma flotante. Por ello, es recomendable emplear algún test robusto en lugar de comparar distancias euclídeas entre puntos. [4]

Explicación gráfica del proceso

Pseudocódigo

 function BowyerWatson (pointList) // pointList es una lista de coordenadas de los puntos de entrada triangulation := super-triangle // Crea un triángulo suficientemente grande como para contener todos los puntos de entrada for each point in pointList do // Añade los puntos uno a uno badTriangles := empty set for each triangle in triangulation do // busca los triángulos que van a dejar de ser válidos if point is inside circumcircle of triangle add triangle to badTriangles for each triangle in badTriangles do // Elimina los triángulos de la estructura, creando un hueco remove triangle from triangulation polygon := empty set for each triangle in badTriangles do // Calcula la frontera del hueco creado por bad_triangles for each edge in triangle do if edge is not shared by any other triangles in badTriangles add edge to polygon for each edge in polygon do // re-triangula el hueco usando el nuevo punto. newTri := form a triangle from edge to point add newTri to triangulation for each triangle in triangulation // Limpieza de los triángulos externos a la lista de vértices. if triangle contains a vertex from original super-triangle remove triangle from triangulation return triangulation 

Enlaces externos

  • Algoritmo de triangulación para Modelización de Terreno explicaciones genéricas del algoritmo con ejemplos de código fuente en varios lenguajes de programación.
  • pyDelaunay2D : Una implementación en python del algoritmo de Bowyer-Watson.

Referencias

  1. Bowyer, Adrian (1981). «Computing Dirichlet tessellations». Comput. J. 24 (2): 162-166. doi:10.1093/comjnl/24.2.162. 
  2. Watson, David F. (1981). «Computing the n-dimensional Delaunay tessellation with application to Voronoi polytopes». Comput. J. 24 (2): 167-172. doi:10.1093/comjnl/24.2.167. J.
  3. Rebay, S. (1993). «Efficient Unstructured Mesh Generation by Means of Delaunay Triangulation and Bowyer-Watson Algorithm». Journal of Computation Physics (106): 125-138. Consultado el 14 de diciembre de 2016. 
  4. Shewchuk, Jonathan Richard (1997). «Adaptive Precision Floating-Point Arithmetic and Fast Robust Predicates for Computational Geometry». Discrete & Computational Geometry (18): 305-363. J.
  •   Datos: Q4951461
  •   Multimedia: Bowyer–Watson algorithm

algoritmo, bowyer, watson, geometría, computacional, algoritmo, bowyer, watson, método, para, calcular, triangulación, delaunay, conjunto, finito, puntos, cualquier, número, dimensiones, algoritmo, puede, emplear, también, para, construir, diagrama, voronoi, p. En geometria computacional el Algoritmo de Bowyer Watson es un metodo para calcular la triangulacion de Delaunay de un conjunto finito de puntos en cualquier numero de dimensiones El algoritmo se puede emplear tambien para construir el Diagrama de Voronoi de los puntos el cual es el grafo dual de dicha triangulacion El algoritmo es a veces denominado como Algoritmo de Bowyer o Algoritmo de Watson ya que ambos autores Adrian Bowyer y David Watson lo desarrollaron de forma independiente al mismo tiempo Cada uno publico un articulo sobre el mismo asunto en la revista The Computer Journal 1 2 Algoritmo de Bowyer WatsonTipoGeometria computacionalProblema que resuelveTriangulacion de Delaunay Diagrama de VoronoiEstructura de datosMalla de TriangulosCreadorAdrian Bowyer y David WatsonFecha1981Clase de complejidadPTiempo de ejecucionPeor casoO N 2 displaystyle O N 2 Caso promedioO N l o g N displaystyle O N log N editar datos en Wikidata Indice 1 Descripcion del algoritmo 2 Explicacion grafica del proceso 3 Pseudocodigo 4 Enlaces externos 5 ReferenciasDescripcion del algoritmo EditarEl algoritmo de Bowyer Watson emplea un metodo incremental donde se parte de una triangulacion de Delaunay trivial generalmente un triangulo o un par de triangulos que forman una caja contenedora a la que se anaden uno a uno los puntos Despues de cada insercion se eliminan aquellos triangulos cuyo circuncirculo contengan al punto recien introducido El agujero resultante tiene forma de poligono estrellado simple el cual puede ser retriangulado alrededor del punto recien insertado Si nuestra estructura de datos dispone de informacion de conectividad entre triangulos el algoritmo tiene orden O N log N operaciones para triangular N puntos a pesar de que existen casos degenerados especiales donde puede tomar O N2 El orden en que se insertan los vertices tiene una gran influencia en el tiempo de ejecucion del algoritmo por lo que a veces se realiza una ordenacion previa de los mismos acorde a una curva de Hilbert 3 Este algoritmo puede ser sensible a datos de entrada degenerados como puntos situados en patrones regulares que hacen que la resolucion de si un punto esta dentro o fuera del circuncirculo de un triangulo dependa de decimales por debajo del umbral de precision de la representacion en coma flotante Por ello es recomendable emplear algun test robusto en lugar de comparar distancias euclideas entre puntos 4 Explicacion grafica del proceso Editar Generacion de la triangulacion inicial trivial en este caso un super triangulo e insercion del primer nodo Inserta segundo nodo Inserta tercer nodo Inserta cuarto nodo Inserta quinto y ultimo nodo Elimina las aristas con algun extremo en el super triangulo inicial Pseudocodigo Editarfunction BowyerWatson pointList pointList es una lista de coordenadas de los puntos de entrada triangulation super triangle Crea un triangulo suficientemente grande como para contener todos los puntos de entrada for each point in pointList do Anade los puntos uno a uno badTriangles empty set for each triangle in triangulation do busca los triangulos que van a dejar de ser validos if point is inside circumcircle of triangle add triangle to badTriangles for each triangle in badTriangles do Elimina los triangulos de la estructura creando un hueco remove triangle from triangulation polygon empty set for each triangle in badTriangles do Calcula la frontera del hueco creado por bad triangles for each edge in triangle do if edge is not shared by any other triangles in badTriangles add edge to polygon for each edge in polygon do re triangula el hueco usando el nuevo punto newTri form a triangle from edge to point add newTri to triangulation for each triangle in triangulation Limpieza de los triangulos externos a la lista de vertices if triangle contains a vertex from original super triangle remove triangle from triangulation return triangulationEnlaces externos EditarAlgoritmo de triangulacion para Modelizacion de Terreno explicaciones genericas del algoritmo con ejemplos de codigo fuente en varios lenguajes de programacion pyDelaunay2D Una implementacion en python del algoritmo de Bowyer Watson Referencias Editar Bowyer Adrian 1981 Computing Dirichlet tessellations Comput J 24 2 162 166 doi 10 1093 comjnl 24 2 162 Watson David F 1981 Computing the n dimensional Delaunay tessellation with application to Voronoi polytopes Comput J 24 2 167 172 doi 10 1093 comjnl 24 2 167 J Rebay S 1993 Efficient Unstructured Mesh Generation by Means of Delaunay Triangulation and Bowyer Watson Algorithm Journal of Computation Physics 106 125 138 Consultado el 14 de diciembre de 2016 Shewchuk Jonathan Richard 1997 Adaptive Precision Floating Point Arithmetic and Fast Robust Predicates for Computational Geometry Discrete amp Computational Geometry 18 305 363 J Datos Q4951461 Multimedia Bowyer Watson algorithm Obtenido de https es wikipedia org w index php title Algoritmo de Bowyer Watson amp oldid 119156038, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos