21 votos

Cómo de la Unión de Muchos Polígonos de manera Eficiente

Le he pedido a esta pregunta ASÍ, pero la única respuesta que he obtenido es el de una no-respuesta como lo que puedo decir, así que me gustaría probar mi suerte aquí.

Básicamente, estoy en busca de un mejor de lo ingenuo algoritmo para la construcción de polígonos de la unión de muchos polígonos, cada uno con una lista de Vértices $V$. El ingenuo algoritmo para encontrar la unión de polígonos(s) va como esto:

En primer lugar tomar dos polígonos, de la unión de ellos, y tomar otro polígono, unión con la unión de los dos polígonos, y repetir este proceso hasta que cada de una sola pieza. A continuación, voy a correr a través de la unión de polígonos de la lista y compruebe si hay todavía algunos los polígonos pueden ser combinados, y voy a repita este paso hasta que un resultado satisfactorio se consigue.

Hay un algoritmo inteligente?

Para este propósito, se puede imaginar cada polígono como un rompecabezas pieza, cuando termine de ellos obtendrá una buena imagen. Pero la cuestión es que una pequeña porción ( es decir <5%) del rompecabezas que falta, y aún así se requiere para formar una imagen tan completa como sea posible; que el polígono ( o polígonos)-- tal vez con orificios que quiero formar.

Nota: estoy no preguntar acerca de cómo la unión de dos polígonos, pero estoy preguntando acerca de--dado que yo conozca cómo la unión de dos polígonos--cómo de la unión de $n$ número de (donde $n>>2$) polígonos de una manera eficiente.

También,todos los polígonos pueden compartir los bordes, y algunos polígono del borde puede ser compartido por uno o muchos otros polígono del borde. Los polígonos no puede superponen entre sí.

16voto

yoliho Puntos 340

Probablemente el mejor método es realizar simultáneamente el plano de barrido de todos los polígonos. Esto se describe en El Manual de Diseño de Algoritmos en "Intersección de Detección." (Algoritmos para encontrar la intersección puede ser alterada para que en lugar de encontrar la unión.) También se habla de ello en mi libro de texto de Geometría Computacional en C, en el Capítulo 7, "Intersección de NonConvex Polígonos." El momento en que la complejidad es $O(n \log n + k)$ $n$ total de vértices y $k$ puntos de intersección entre los bordes de los diferentes polígonos.

11voto

Martin Davis describe un enfoque en su blog que él llama "Cascada de la Unión".

El enfoque es recorrer un índice espacial como un R-tree, a la unión de polígonos de que es probable que se superponen o el tacto, que se deshace de una gran cantidad de internos de los vértices. El enfoque ingenuo podría no reducir el número de vértices entre dos iteraciones...

Martin Davis descripción (fragmento):

Esto puede ser pensado como un post-orden de recorrido de un árbol, donde el la unión se realiza en cada nodo interior. Si la estructura de árbol es determinada por la proximidad espacial de los polígonos de entrada, y no es la superposición o la adyacencia en el conjunto de datos de entrada, este algoritmo puede ser muy eficiente. Esto es debido a operaciones de unión superior en el árbol son más rápidos, ya que la línea de trabajo es "combinado" de los niveles inferiores.

Cascading union

La complejidad

No sé exactamente la complejidad del algoritmo, pero podría ser similar a la de barrido de la línea de algoritmo, ya que la complejidad de los algoritmos depende del número de vértices restantes en cada paso.

Véase también la descripción completa de la Cascada de la Unión algoritmo de Martin Davis blog.

2voto

lhf Puntos 83572

Si los polígonos que compartan exactamente una arista o son disjuntas, a continuación, crear una lista de aristas y polígonos a la que pertenecen y, a continuación, retire cada borde que tiene dos polígonos, junto a los dos polígonos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X