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