Seminario de graficación Clipping (recorte) Seminario de graficación
3.1 Introducción Matemáticamente, “recortar (to clip) un conjunto contra otro” = “encontrar la intersección entre ambos conjuntos”. Tipos de recorte: De línea (contra un rectángulo o región convexa) De polígono (contra otro polígono)
Algoritmos de recorte de línea Categoría Polígono Commentario Cohen-Sutherland No el mejor pero aún muy usado. rectangular Algoritmo clásico, popular porque es fácil de implementar. Cyrus-Beck Interesante pero no recomendado convexo Más rápido que el anterior. Liang-Barsky Aún popular, fácil de implementar. Nicholl-Lee-NIcholl Uno de los mejores en su tipo. Bidimensional únicamente.
Algoritmos de recorte de polígono Categoría Polígono Commentario Sutherland-Hodgman Histórico y fácil convexo Weiler Histórico, fácil, interesante, pero no recomendado arbitrario Liang-Barsky Interesante pero no recomendado rectangular Maillot Uno de los mejores en su tipo. Vatti Rápido, versátil, y puede generar descomposición trapezoidal de la intersección Greiner-Hormann Tan general como el Vatti. Más simple y potencialmente rápido, pero no tiene descomposición trapezoidal.
...Introducción En ocasiones se requiere introducir vértices cuando se hace recorte de polígonos. Esquinas introducidas puntos de vuelta (turning points)
3.2.1 Recorte de línea Cohen-Sutherland Resuelve el problema de recorte planar: Dado un segmento [P1,P2], recortarlo contra una ventana rectangular y retornar el segmento recortado [Q1, Q2] (puede ser vacío).
Codificación de regiones Se definen 9 regiones con respecto a las líneas del rectángulo, y se define c(P)=x3x2x1x0, que son dígitos binarios definidos con referencia a las líneas: x0: derecha x1: arriba x2: izquierda X3: abajo 0110 0010 0011 0100 0000 0001 1100 1000 1001
Paso 1 Codificar c1=c(P1) y c2(P2)
Paso 2 Comprobar si el segmento ya está resuelto: c1 or c2 = 0 Completamente contenido, se devuelve Q1 = P1 y Q2 = P2 c1 and c2 <> 0 Completamente excluido, se devuelve un segmento vacío
Paso 3 Puesto que no se resolvió, se debe cortar con el límite apropiado y se regresa al paso 2. Buscar el extremo P que determinará la línea contra la cual cortar Si c1 = 0000, P1 no debe ser cortado, por lo que P es P2 y Q es P1 Si c1 <> 0000, entonces P es P1 y Q es P2 La línea cortadora es determinada por el bit “1” más a la izquierda, en c(P). Sea A la intersección de [P,Q] con esa línea. Repetir pasos 1-3 para el segmento [A,Q].
Ejemplo A B D C