Weiler Atherton – Algoritmo de recorte de polígonos

Antecedentes :

Weiler Atherton Polygon Clipping Algorithm es un algoritmo creado para permitir que sea posible el recorte incluso de algoritmos cóncavos. A diferencia del algoritmo de recorte de polígonos de Sutherland – Hodgman, este algoritmo puede recortar polígonos cóncavos sin dejar ningún residuo.

Algoritmo :

 1. First make a list of all intersection points namely i1, i2, i3, ...
 2. Classify those intersection points as entering or exiting.
 3. Now, make two lists, one for the clipping polygon, and the other 
    for the clipped polygon.
 4. Fill both the lists up in such a way that the intersection points 
    lie between the correct vertices of each of the polygon. That is 
    the clipping polygon list is filled up with all the vertices of 
    the clipping polygon along with the intersecting points lying 
    between the corresponding vertices.
 5. Now, start at the 'to be clipped' polygon's list.
 6. Choose the first intersection point which has been labelled as 
    an entering point. Follow the points in the list (looping back to 
    the top of the list, in case the list ends) and keep on pushing 
    them into a vector or something similar of the sorts. Keep on following
    the list until an exiting intersection point is found.
 7. Now switch the list to the 'polygon that is clipping' list, and find
    the exiting the intersection that was previously encountered. Now keep
    on following the points in this list (similar to how we followed the
    previous list) until the entering intersection point is found (the 
    one that was found in the previous 'to be clipped' polygon's list).
 8. This vector now formed by pushing all the encountered points in the 
    two lists, is now the clipped polygon (one of the many clipped 
    polygons if any of the clipping polygons is concave).
 9. Repeat this clipping procedure (i.e. from step 5) until all the 
    entering intersection points have been visited once.

Explicación :

1. Encontrar todos los puntos de intersección y agruparlos
Aquí, sea un polígono ABCD y otro polígono VWXYZ. Sea ABCD el polígono recortado y sea VWXYZ el polígono recortado.

Entonces, podemos encontrar los puntos de intersección usando cualquier método. Por ejemplo, podemos encontrar los puntos de intersección por separado y luego encontrar para cada punto de intersección si está entrando o saliendo, o podemos usar Cyrus Beck y encontrar todos los puntos de intersección y también obtener si un punto está entrando o saliendo. Consulte a Cyrus Beck para obtener más información sobre este algoritmo.

2. Elaboración y llenado de dos listas
Ahora, hacemos dos listas. Uno para el polígono recortado y otro para el polígono recortado.
Ahora así es como lo llenamos:

3. Ejecución del algoritmo
Comenzamos en la lista de polígonos recortados, es decir, VWXYZ.
Ahora, encontramos el primer punto de intersección que está entrando. Por lo tanto, elegimos i 1 .
Desde aquí comenzamos a hacer la lista de vértices (o vector) para hacer un sub-polígono recortado.

De acuerdo con el ejemplo dado, i 1 Y i 2 es un subpolígono recortado.
De manera similar, obtenemos:

i 0 V i 3 como otro sub-polígono también.

Por lo tanto, pudimos obtener dos subpolígonos como resultado de este recorte de polígono, que involucraba un polígono cóncavo, lo que resultó en:

De manera similar, este recorte funciona para polígonos convexos.

Limitaciones :

Este algoritmo de recorte de polígonos no funciona para polígonos que se intersecan a sí mismos, aunque se han propuesto algunos métodos para poder resolver este problema también y han funcionado con éxito.

Ejemplo :

Sea V 1 V 2 V 3 V 4 V 5 V 6 la ventana de recorte y P 1 P 2 P 3 P 4 P 5 P 6 el polígono.
Ahora, así es como funcionará el algoritmo.
Se generan dos listas, una para la ventana de recorte y otra para el polígono. Partiremos de la lista de polígonos. (Tenga en cuenta que la lista del polígono solo contiene los vértices del polígono y las intersecciones y de manera similar para la lista de la ventana de recorte).

Entonces, según el algoritmo, el primer polígono que se formará será i 2 i 3 i 8 i 1

Luego el siguiente subpolígono, i 4 i 5 i 6 i 7 .

La salida se verá así:

Cita :

K. Weiler y P. Atherton. 1988. Eliminación de superficies ocultas mediante la clasificación de áreas poligonales. En Tutorial: infografías; síntesis de imágenes, Kenneth I. Joy, Charles W. Grant, Nelson L. Max y Lansing Hatfield (Eds.). Computer Science Press, Inc., Nueva York, NY, EE. UU. 209-217.

Fuente : https://www.cs.drexel.edu/~david/Classes/CS430/HWs/p214-weiler.pdf

Para la implementación de Weiler Atherton, consulte Implementación

Publicación traducida automáticamente

Artículo escrito por xlms2065 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *