Você está na página 1de 29

Taller de Computacin Grfica

Captulo II.-

Algoritmos Grficos en 2

Dimensiones.
Un paquete grfico raster aproxima las primitivas grficas matemticas (ideales), descritas en trminos de un plano cartesiano, a un conjunto de pixeles de una determinada intensidad de gris o color. Estos pixeles son almacenados como mapas de bits en un buffer de memoria grfica.

II.1.- Discretizacin de lneas


Un algoritmo de discretizacin de lneas calcula las coordenadas de los pixeles que estn sobre o cerca de una lnea ideal infinitamente delgada sobrepuesta a una trama bidimensional.

25

Profesor : Javier Vidal Valenzuela

Taller de Computacin Grfica

Figura II.1. Relacin de pxeles con lnea ideal En principio nos gustara que la secuencia de pxeles estuviera lo ms cerca posible de la lnea ideal y que adems fuera lo ms recta posible. Consideremos por el momento lneas de 1 pxel de grosor que tengan exactamente un pixel de dos niveles en cada columna (en cada fila patra lneas de pendiente mayor o igual que 1).

Para visualizar la geometra supondremos que mostraremos un pixel como un punto circular centrado en la posicin (x, y) de la trama.

25

Profesor : Javier Vidal Valenzuela

Taller de Computacin Grfica

II.1.1.-

Algoritmo incremental bsico

La estrategia ms sencilla para discretizar lneas es calcular la pendiente m como y/x e incrementar x en 1 a partir del punto ms a la izquierda. As se calcular : yi = m * xi + B; xi As se obtendr pares de puntos (xi, round(yi)) donde round (yi) = floor (0,5 + yi). En la prctica esta estrategia podra ilustrarse de la siguiente forma:

Figura II.2. Aplicacin de algoritmo incremental bsico Esta estrategia, aunque es sencilla no es muy eficiente ya que requiere realizar una multiplicacin y una suma en punto flotante y adems invocar a la funcin floor por cada iteracin (punto dibujado). Observemos que yi+1 = m * xi+1 + B = m * (xi + x) + B = yi + m * x y como x es 1, entonces yi+1 = yi + m. Resumiendo, si xi+1 = xi + 1, entonces yi+1 = yi + m. Si |m| > 1, un incremento en x crea un incremento en y mayor que 1. Por lo tanto, se debe invertir los papeles de x e y, es decir,

25

Profesor : Javier Vidal Valenzuela

aumentar x en x = y /m = 1/m y asignarle un incremento unitario a y. Otros casos especiales corresponden a la discretizacin de lneas con pendiente y 0, los cuales deben tratarse en forma particular, notar que el primer caso se da cuando x es 0 y el segundo cuando y es 0. El siguiente procedimiento muestra discretizacin de lneas con pendiente |m| 1. slo el caso de

procedure linea (x0, y0, x1, y1, valor : integer); var x : integer; dx, dy, y, m : real; begin dy := y1 - y0; dx := x1 - x0; m := dy / dx; y := y0; for x := x0 to x1 do begin escribirPixel(x, int(floor(y+0,5)),valor); y := y + m; end; end;

Ejercicios 1 : 1) Aplique el algoritmo incremental para obtener los valores de pxeles en el siguientes caso:

2) Implemente en forma completa el algoritmo incremental para discretizacin de lneas.

II.1.2.-

Algoritmo de punto medio


El algoritmo anterior utiliza aritmtica de punto flotante, lo que

hace lo hace tener cierta desventaja. Bresenhan desarrollo un algoritmo que slo emplea aritmtica entera, es decir, que calcula ( xi+1, yi+1) a

partir de (xi, yi). Para ilustrarlo supondremos que la pendiente de la lnea est entre 0 y 1 (las lneas de otras pendientes se pueden obtener por reflexin). Al punto extremo inferior le denominaremos (x0,y0) y al superior derecho (x1,y1).

Consideremos la situacin ilustrada en la siguiente figura, en la cual, segn la formulacin de Bresenhan, se calcula la diferencia entre las distancias E y NE a Q y se usa el signo de la diferencia para seleccionar la mejor aproximacin de la lnea al pxel cuya distancia desde Q sea la menor.

Figura II.3. Aplicacin de algoritmo de punto medio para dicretizacin de lnea En la formulacin del algoritmo de punto medio se observa a que lado de la lnea se encuentra el punto medio M, es fcil ver que si M est por encima de la lnea, el pixel E es el ms cercano y si el punto medio M est por debajo de la lnea el punto NE ser el elegido. As es como en

el ejemplo el punto elegido ser el NE. Cmo se calcula a qu lado debe quedar el pxel?. Supongamos que representa la lnea por F(x, y) = a*x + b*y + c

y consideremos nuevamente

x = x1 - x0 y = y1 - y0
con esto la ecuacin de la lnea queda y = y/x*x + B ambas ecuaciones interceptan su pendiente, por lo tanto, podemos escribir F(x, y) = y*x - x*y + B*x donde a = y; b = -x; y, c = B*x. No es necesario demostrar aqu que F(x, y) es 0 en la lnea, es mayor que 0 para los puntos por debajo de la lnea y es negativa para los puntos sobre la lnea. Para aplicar el criterio del punto medio slo se debe calcular F(M) = F(xp+1, yp+) y calcular el signo. Como nuestro criterio se basa en el valor de la funcin en el punto (xp+1, yp+), por definicin d = a*(xp+1) + b*( yp+) + c que corresponde a la ecuacin original evaluada en el siguiente punto medio. Si d>0 se elige el pixel NE; si d<0 se elige E y si d=0 se puede elegir cualquiera, aunque en este ltimo caso debe quedar establecido cual se elegir. Los valores de M y d para el siguiente punto dependen de la eleccin de NE o E. Si se elige E, M se incrementa una unidad en la direccin x, por lo tanto dnuevo = F(xp+2, yp+1/2) =a*(xp+2) + b*(yp+) + c pero dviejo = a*(xp+1) + b*(yp+) + c

Al restar dviejo a dnuevo se obtiene la diferencia incremental dnuevo = dviejo + a El incremento que se usa despus de elegir E se denomina E y su valor es E = a = y. En otras palabras, con slo sumar E a la variable de decisin actual podemos obtener, en forma incremental, el valor de la variable de decisin en el siguiente paso, y sin tener que calcular F(M). Si se elige NE, M se incrementa en una unidad, tanto en la direccin x como en la direccin y, luego dnuevo = F(xp+2, yp+3/2) = a*(xp+2) + b*(yp+3/2) + c Aplicando el procedimiento de resta para obtener la diferencia incremental d nuevo =d viejo +b +a

El incremento que sumamos a d despus de elegir NE se llama NE y corresponde a NE = a + b = y - x. Resumiendo en el algoritmo del punto medio, en cada paso el mtodo escoge entre dos pixeles basndose en el signo de una variable de decisin. Esta variable de decisin se actualiza sumndole E o NE. Como el primer pxel esta en ( x0,y0) se puede calcular directamente eligiendo E o NE. El primer punto medio est en (x0+1, y0+) y F(x0+1, y0+) = a*(x0+1) + b*(y0+) + c = a*x0 + b*y0 + c + a + b/2 = F(x0, y0) + a + b/2 sin embargo, (x0, y0) es un punto de la lnea, luego F(x0, y0) = 0, entonces

dinicial = a + b/2 = y - x/2. Para eliminar la divisin por 2 se redefine F multiplicndola por 2, lo cual no afecta al signo de la variable de decisin. Finalmente, el algoritmo de punto medio para la discretizacin de lneas cuyas pendientes estn entre 0 y 1 es:
procedure linea (x0, y0, x1, y1, valor : integer); var dx, dy, incr_NE, d, x, y: integer; incr_E, begin dy := y1 - y0; dx := x1 - x0; - dx; d := dy * 2;

x := x0; y := y0; escribirPixel(x, y, valor); while (x < x1) do begin if (d <= 0) then begin d := d + incr_E; x := x + 1; end else begin d := d + incr_NE; x := x + 1; y := y + 1; end; escribirPixel(x, int(floor(y+0,5)),valor); end; end;

2*dy incr_E := incr_NE := (dy - dx) * 2;

Ejercicios 2 1) Aplicar el algoritmo de punto medio al primer problema del ejercicio 1. 2) Escribir el algoritmo de punto medio para el caso de general (todas las pendientes). II.1.3.Aspectos adicionales

Una lnea entre p0 y p1 debe marcar los mismos pxeles que una lnea entre p1 y p0.

Figura II.4. Aplicacin de pixeles en sentido p0-p1 y p1-p0 Problemas de las lneas que se inician en las aristas de un tringulo de recorte.

Figura II.5. Problemas de recorte de lneas Variacin de la intensidad de la lnea como funcin de la pendiente.

Figura II.6. Variacin de intensidad como funcin de la pendiente II.2.- Discretizacin de crculos La ecuacin de un crculo centrado en el origen es: x2 + y2 = R2 por lo cual, una primera aproximacin para discretizar un crculo es resolver la ecuacin
2 2 1

y = (R - x ) ; xZ, x entre 0 y R Tambin se pueden usar las ecuaciones (R cos , R sen ) con creciendo desde 0 a 90, con esto se reduce el espaciado, pero tampoco es tan eficiente, ya que usa aritmtica de punto flotante y llamadas a funciones. II.2.1.Aprovechamiento de la simetra Se puede aprovechar la simetra del crculo para slo calcular uno de los 8 segmentos de 45 y luego con ste determinar los dems octantes. La siguiente figura y procedimiento resumen el proceso:

Con esto se dibuja 1/4 de crculo, los dems cuadrantes se pueden obtener por simetra.

procedure puntos_circulo (x, y:real; valor:integer); begin escribir_pixel(x, y, valor); escribir_pixel(y, x, valor); escribir_pixel(y, -x, valor); escribir_pixel(x, -y, valor); escribir_pixel(-x, -y, valor); escribir_pixel(-y, -x, valor); escribir_pixel(-y, x, valor); escribir_pixel(-x, y, valor); end;

Figura II.7. Simetra en crculos II.2.2.Algoritmo de Crculo de Punto Medio Se considerar la discretizacin del segmento de crculo de 45 correspondiente a x = 0 hasta x = y = R/2, los dems puntos se pueden dibujar con la funcin puntos_circulo. Sean P, el pixel elegido previamente en (xp, yp); E y SE los pxeles candidatos (ver figura).

Figura II.8. Aplicacin de algoritmo de punto medio para discretizacin de crculo La ecuacin de una circunferencia es F(x, y) = x2 + y2 - R2

y F(x, y) = 0, si el punto (x, y) se encuentra en el crculo; F(x, y) < 0, si (x, y) est dentro del crculo; y, F(x, y) > 0, si (x, y) est fuera del crculo. Se define la variable de decisin d en el punto medio entre E y SE. d = F(xp + 1, yp - ) = (xp + 1)2 + (yp - )2 - R2 Si d < 0 se escoge E y la variable de decisin dnueva ser: dnueva = F(xp + 2, yp - ) = (xp + 2)2 + (yp - )2 - R2 lo cual da que la diferencia incremental es dnuevo = d + 2 * xp +3 Por lo tanto, se define el incremento por : E = 2 * xp + 3 Si d > 0 se elige SE y la variable de decisin dnuevo ser: dnuevo = F(xp + 2, yp - 3/2) = (xp + 2)2 + (yp - 3/2)2 R2 como dnuevo = d + 2 * xp - 2 * yp + 5 Por lo tanto, el incremento est dado por: SE = 2 * xp - 2 * yp + 5 Es decir, en este caso los valores de E y SE son variables, dependen de los puntos seleccionados (xp, yp) en la iteracin previa. El clculo de la condicin inicial debe considerar que el punto de partida del crculo est en (0, R), por lo tanto, el siguiente punto medio estar en (1, R - ) y F(1, R - ) = 1 + R2 - R + - R2 = 5/4 - R

Por lo tanto, el programa quedar


procedure circulo_punto_medio(radio, valor : integer); var x, y : integer; d : real; begin x := 0; y:= radio; d := 5.0 / 4 - radio; puntos_circulo (x, y, valor); while ( y > x) do begin if ( d < 0) then begin d := d + x * 2.0 + 3; x := x +1; end else begin d := d + (x - y) * 2.0 + 5; x := x + 1; y := y - 1; end; puntos_circulo (x, y, valor); end; end;

Para que este algoritmo trabaje slo con enteros se definir una nueva variable de decisin h=d- con lo que se reemplazar la lnea 7 del programa a h := 1 - radio; En cuanto a la comparacin d < 0 se puede reemplazar sin problemas por h < 0, ya que h se inicia y se incrementa en valores enteros.

II.3.- Atributos de las primitivas Los atributos de las primitivas dependen de si esta es una lnea, un crculo, un polgono, etc. Por ejemplo, una lnea puede ser punteada, ancha, a color, etc.; un crculo puede estar relleno con un color o patrn, el texto puede tener una orientacin, tamao de caracteres, etc. II.3.1.Primitivas gruesas Conceptualmente, las primitivas gruesas son generadas

dibujando la silueta de una primitiva simple (un pxel). Una estrategias es ubicar el centro de una brocha (u otro punto, como por ejemplo, pxel calculado por la esquina superior izquierda de una brocha el algoritmo de generacin de la primitiva. Esta rectangular), la cual tiene una seccin transversal especificada, en cada tcnica deja un conjunto de preguntas por resolver: primero, cul es la forma ideal de la brocha?. Lo tpico es usar brochas circulares o rectangulares. Segundo, Cul debe ser la orientacin de una brocha no circular?. Tercero, Cul ser el aspecto de los extremos de una lnea gruesa?, etc. Los mtodos para dibujar primitivas gruesas son: II.3.1.1 Replicacin de pixeles Una forma rpida de producir primitivas gruesas es escribir pixeles mltiples que incluyan al pixel calculado por el algoritmo de generacin de la primitiva. Este mtodo trabaja bastante bien para lneas; en el caso de lneas con pendiente entre (-1,1), los pixeles son duplicados en columnas y para las otras lneas se duplican en filas. Sin embargo, el efecto es que los puntos extremos de la lnea son o verticales u horizontales. Este algoritmo presenta algunos problemas:

- grandes espaciados en lugares donde los segmentos de lnea producen ngulos. - prdida de pixeles en donde se produce cambios de replicacin - lneas horizontales y verticales con un grosor distinto a las lneas que estn en ngulo - Si el grosor de una lnea es de tamao par se debe seleccionar la columna o fila a replicar.

Figura II.9. Primitivas gruesas con replicacin de pxeles II.3.1.2 Lpiz mvil. Seleccionar un lpiz mvil cuyo centro (o esquina superior izquierda) viaja a lo largo de una trayectoria formada por un pixel de la primitiva trabaja razonablemente para trazado de lneas. El problema de los puntos extremos de la lnea persiste, al igual que el problema del grosor variable de la lnea, el cual depende del ngulo usado.

Figura II.10. Primitivas gruesas usando lpiz mvil

La solucin en este caso pasa por definir una huella que corresponde a la seccin transversal del lpiz mvil, el centro (o esquina superior derecha) de esta huella debe ubicarse en el pixel calculado para la primitiva simple, y los pixeles de la huella son copiados para producir la primitiva gruesa. Este mtodo produce un efecto adverso, algunos pixeles se dibujan ms de una vez ya que la huella se sobrepone sobre varios pixeles en diferentes oportunidades. Para resolver este problema, el siguiente mtodo define una estructura temporal que guarda los puntos antes de que sean dibujados

Figura II.10. Optimizacin de clculo para primitivas gruesas usando lpiz mvil II.3.1.3 Llenado de rea entre bordes El tercer mtodo consiste en construir los mrgenes internos y externos de la primitiva a una distancia de t/2 (t es el grosor de la primitiva) sobre cada lado de la trayectoria ideal de la primitiva. Esta tcnica permite manejar grosores pares e impares. Con esta tcnica una lnea puede ser dibujada como un rectngulo de ancho t y largo equivalente a la longitud de la lnea. En el caso de los crculos, se debe generar dos crculos, uno externo de radio R+t/2 y uno interno de radio R-t/2. Luego se debe rellenar el espacio entre ellos.

Figura II.11. Primitivas gruesas usando llenado entre reas II.3.2.Rellenado de Primitivas La tarea de rellenar primitivas se puede dividir en 2 partes: dividir que pixeles se deben usar para el relleno (dependiente de la forma de la primitiva y de los posibles recortes) y qu valores tendrn los pixeles que servirn para el relleno. En primer lugar, se revisar el rellenado de primitivas no recortadas con colores slidos. En general, para determinar qu pixeles usar en el relleno se debe determinar la interseccin entre las lneas de rastreo (horizontales) y las aristas de la primitiva. En el caso de un rectngulo, se debe llenar cada espacio desde Xmin a Xmax con el mismo valor de pixel, en trminos de algoritmo esto sera:
for (y from Ymin to Ymax) from(X from Xmin to Xmax) writePixel (x,y,valor)

Usando esta tcnica se debe resolver el problema de los rectngulos que comparten arcos, habra que decidir en estos usos a que rectngulo pertenecen los arcos compartidos. II.3.2.1 Rellenado de polgonos El algoritmo de generacin de polgonos que se describe a continuacin maneja tanto polgonos convexos como cncavos, incluso aquellos que se autointersectan y que tiene huecos interiores.

El algoritmo opera calculando los espacios existentes entre el arco izquierdo y derecho del polgono. Los tramos externos son calculados por el algoritmo incremental que calcula la interseccin arco/lnea de rastreo a partir de la interseccin con la lnea de rastreo previa. La siguiente figura ilustra un polgono y una lnea de rastreo que cruza en y = 8. Esto produce la interseccin con los arcos AF, EF, DF y CD. Los arcos AF y CD caen sobre coordenadas enteras, en cambio, la interseccin de la lnea 8 con los arcos EF y CD no.

Figura II.12. Rellenado de polgonos

En

la

figura

II.13,

se

observa

un

polgono

dibujado

aprovechando un algoritmo de discretizacin de lneas y luego rellenndolo. Sin embargo, algunos pixeles extremos quedan fuera de la primitiva por lo que, en la figura b, se ajustan al interior.

(a)

(b)

Figura II.13. Dos polgonos rellenados con diferentes tcnicas

Como en el algoritmo punto medio, se usa un algoritmo incremental para calcular los extremos de los arcos en una lnea de rastreo a partir de las correspondientes a la lnea anterior de rastreo, sin tener que calcular en forma analtica las intersecciones de la lnea de rastreo con cada arco del polgono. Por ejemplo, en la lnea de rastreo 8 de la figura II.12 hay 2 arcos de pixeles dentro del polgono. Los arcos se pueden rellenar mediante un proceso de tres pasos: 1. Hallar las intersecciones de la lnea de rastreo con todos los arcos del polgono. 2. Ordenar las intersecciones aumentado la coordenada x 3. Colocar todos los pixeles entre pares de intersecciones que se encuentren dentro de la regin: la paridad es inicialmente par y cada interseccin que se detecte invierte el bit de paridad; se dibuja cuando la paridad es impar. Los dos primeros pasos de este proceso, la deteccin de intersecciones y ordenamiento se vern ms adelante. La lista ordenada de coordenadas x es (2,4.5,8.5,13) para la figura II.12. El tercer paso requiere: 3.1. Que dada una interseccin con un valor de x arbitrario y fraccionario Cmo se determina cul de los dos pixeles a cada lado de la interseccin es el interior? 3.2. Cmo se trata el caso especial de las intersecciones en coordenadas enteras en los pixeles? 3.3. Cmo se trata en caso especial del paso 3.2 para vrtices compartidos? 3.4. Cmo se trata en caso especial del paso 3.2 si los vrtices definen una arista horizontal?

Para manejar el caso 3.1 determinamos sin aproximamos hacia la derecha a una interseccin fraccionaria y estamos dentro del polgono, redondeamos hacia abajo la coordenada x de la interseccin para definir el pixel interior; si estamos afuera del polgono, redondeamos, hacia arriba para quedar dentro. Ejemplo: La interseccin de la lnea de rastreo 8 con x = 4.5 se resuelve redondeando x hacia abajo, e.d., x = 4, como pixel interior. En el caso de x = 8.5 se resuelve redondeando x = 9 (hacia arriba), ya que, estabamos fuera del polgono. El caso 3.2 se maneja con el mismo criterio que el caso de los rectngulos. Para el caso 3.3 contamos el vrtice ymin de una arista en el clculo de la paridad pero no se incluye el vrtice ymax, as slo se

dibujar el vrtice ymax si es el vrtice de un polgono adyacente. Algoritmo de lnea de rastreo No todos los puntos de una arista interesan para una lnea de rastreo Se observa que, varias aristas intersectadas por una lnea de rastreo i, tambin son intersectadas por la lnea de rastreo i+1. Por tanto, el avanzar de una lnea de rastreo a otra podemos calcular la nueva interseccin x de la arista usar de la interseccin de x anterior de acuerdo a xi+1 = (xi+1)/m Donde m es la pendiente de la arista Este mtodo se puede ajustar para manejar slo aritmtica entera, lo cual nos da el algoritmo siguiente:

procedure rastreo-arista-izquierda(xmin,ymin,xmax,ymax,valor:integer); var x, y, num, den, incr: integer; begin x:= xmin; num := xmax xmin; den := ymax - ymin; incr := den; for y := ymin to ymax - 1 do begin escribir_pixel(x, y, valor); incr: = incr + num: if(incr > den) then begin x := x + 1; incr := incr - den; end; end;

end; Este algoritmo sirve para arista izquierda y para pendientes mayores que 1, los otros casos se manejan con argumentos similares. Algoritmo de lnea de rastreo TAA (Tabla de Arcos Activos) Dado que cada lnea de rastreo lleva el control de puntos de interseccin con las aristas. Ejemplo : Para la figura II.12 la TAA de las lneas de rastreo 9 y 10 seran.

Las aristas en la TAA se ordenan de acuerdo con el valor de sus intersecciones con x, para que se puedan rellenar los tramos definidos por pares de valores de interseccin (reordenados apropiadamente). Al avanzar a la siguiente lnea de rastreo y+1 se actualiza la TAA, primero eliminando las aristas en donde y+1 > ymax, luego agregando las aristas en que y+1 = ymin y, finalmente calculando las nuevas instrucciones con x usando el algoritmo de rastreo de la arista correspondiente. TA (tabla de arista o arcos) Contiene todas las aristas ordenadas de acuerdo a su y menor. Ejemplo: La TA para la figura II.12 es:

Una vez formada la tabla de aristas se completan los siguientes pasos: 1. Asignar y igual a la menor coordenada y que tenga una entrada en la tabla TA. 2. 3. Asignar la TAA para que est inicialmente vaca (crear TAA). Repetir hasta que TAA y TA estn vacas: 3.1. Mover del espacio y de la TA a la TAA las aristas con ymin = y y luego ordenar la TAA con base en x. 3.2. Rellenar los valores de los pixeles deseados en la lnea de rastreo y usando pares de coordenada x de la TAA 3.3. Eliminar de la TAA las entradas donde y = ymax 3.4. Incrementar y en 1 (prx. lnea de rastreo). 3.5 Actualizar x para la nueva y en cada arista no vertical que permanezca en la TAA. Alternativas: Los tringulos y trapezoides pueden tratarse en forma especial. Los polgonos tambin se pueden tratar como mallas de tringulos (problema de triangularizacin).

II.4.- Recortes II.4.1.Recorte de puntos extremos Si las fronteras de la coordenada x del rectngulo de recorte estn en xmin y xmax y las fronteras de la coordenada y estn en ymin y ymax debe satisfacer cuatro desigualdades. Xmin x xmax y Y min y max Si no se cumple alguna de las 4 desigualdades, el punto est fuera del rectngulo de recorte II.4.2.RECORTE DE LINEA El caso es el siguiente

Figura II.14. Lneas con diferentes recortes Caso AB se acepta trivialmente ya que los puntos extremos caen dentro del rectngulo. Caso CD un punto est dentro y el otro fuera. Casos EF, GH e IJ los puntos caen fuera.

II.4.2.1 Algoritmo de Recorte de Cohen - Sutherland Este mtodo permite detectar en forma sencilla si una lnea se encuentra a la izquierda de xmin, arriba de ymax, bajo ymin o a la derecha de xmax donde (xmin, ymin) y (xmax, ymax) son las coordenadas que definen el rectngulo. Si el segmento no pude aceptarse o rechazarse tan fcilmente se puede dividir para hacerlo. El mtodo divide el plano de presentacin en 9 regiones. A cada regin se le asigna un cdigo de 4 bits, determinado por la posicin de la regin con respecto a los medios planos exteriores de las aristas del rectngulo de recorte. Los 4 bits en el cdigo, corresponden a las condiciones:

Figura II.15. Asignacin de bits a las regiones bit 1 fuera del medio plano sobre la arista superior y > ymax bit 2 fuera del medio plano bajo la arista inferior y < ymin bit 3 fuera del medio plano a la derecha de la arista derecha x > x max bit 4 fuera del medio plano a la izquierda de la arista izquierda x < xmin Entonces, si los dos extremos de una lnea tienen cdigo cero, la lnea est totalmente dentro del rectngulo. Si los puntos extremos estn fuera del rectngulo de recorte, entonces, tendrn cdigos con 1s intercalados y al aplicar la operacin lgica and debe ser cero, sino se rechaza trivialmente.

II.5.- Antialiasing Las primitivas vistas hasta ahora tienen el problema de poseer aristas irregulares, este problema se denomina escalonamiento o serrado. La aplicacin de tcnicas para reducir este fenmeno se conoce como antialiasing. Una tcnica para aminorar el impacto del escalonamiento es aumentar la reduccin, sin embargo, esto hace ms costoso el hardware, ya que aumenta la memoria requerida por las imgenes y aumenta el tiempo de discretizacin. II.5.1.Muestreo de rea no ponderada

Cualquiera que sea la primitiva dibujada, incluyendo las lneas, pueden ser consideradas ocupando una superficie en la pantalla. Por ejemplo, en la siguiente figura se ha supuesto que una lnea puede verse como un rectngulo con una superficie sobre la pantalla.

As, cada pixel tocado por este rectngulo debera manifestar su presencia en la lnea a travs de una intensidad que es proporcional a la seccin del pixel tocada por la lnea. Obviamente, en este caso suponemos que cada pixel es representado por ms de 1 bit. La tcnica de establecer la intensidad en forma proporcional al

rea cubierta la llamamos muestreo de rea no ponderada. Esta tcnica posee tres propiedades: la primera es la que la intensidad de un pixel intersectado por una lnea decrece conforme

aumenta la distancia entre el centro del pixel y la orilla; la segunda propiedad es que una primitiva no puede influir en la intensidad de un pixel que no est intersectado y finalmente; la tercera propiedad es que las reas iguales contribuyen con la misma intensidad, sin importar la distancia entre el centro del pixel y el rea. Con esta tcnica se conservan las propiedades 1 y 2 de la tcnica anterior, sin embargo, la tercera cambia, es decir, las reas iguales contribuyen en forma desigual: un rea pequea cerca del centro del pixel tiene mayor influencia que una lejos del centro.