Anda di halaman 1dari 9

Computacin Grfica Primitivas Grficas (cont.

)
-Crculo -Area pintada

Algoritmos para graficar circunferencias


DDA Bresenham

Una circunferencia queda determinada con el centro y el radio.

Algoritmos para graficar circunferencias


Simetra: se divide la circunferencia en 8 arcos simtricos. Se desarrollan los pixel del arco definido por x0, y0, xy. Quedan los pixels correspondientes en los otros 7 arcos simtricos

Algoritmo DDA
Partiendo de la ecuacin de la circunferencia, y derivando.

x2 + y 2 = r 2
Se obtiene su ecuacin diferencial.

dy x = dx y

Algoritmo DDA
Como en el caso de rectas este mtodo evala la ecuacin diferencial a intervalos finitos. Debe encontrar una secuencia de puntos de la pantalla (X0 , Y0), (X 1 , Y1),..., (Xn , Yn) que formen el arco de circunferencia. Entonces si tengo un punto de la discretizacin (Xk , Yk), debe ser Xk+1 = Xk - Yk Yk+1 = Yk + Xk Aqu no es constante

Algoritmo DDA
Con esta forma de determinar los puntos de la discretizacin resulta

Y X

k +1 k +1

Yk X k = k X k Y

por lo tanto evala la ecuacin diferencial a intervalos finitos. El valor de determina la frecuencia de muestreo, si es muy pequeo, el cmputo ser redundante y si es muy grande los puntos estarn muy separados. El valor que se elige es x=1. El algoritmo empieza en el pixel P=(r,0)

Algoritmo DDA
( radio , col ) CirculoDDA { rx = radio ; x = round ( rx ); y = 0 ; while ( y x ) { putpixel ( x , y , col ); putpixel ( x , y , col ); putpixel ( x , y , col ); ( x , y , col ); y rx = rx ; rx x = round ( rx ); putpixel y = y + 1; } }

putpixel putpixel putpixel putpixel

( y , x , col ); ( y , x , col ); ( y , x , col ); ( y , x , col );

Realiza slo una operacin de divisin en punto flotante en cada paso.

Algoritmo de Bresenham
Se basa en analizar el error entre la verdadera circunferencia y su discretizacin. En cada paso elige como prximo pixel a aquel que minimice el error.

Para cada pixel P en el arco definido por x0, y0, xy; el pixel siguiente slo puede ser S (sur) o D (diagonal)

Algoritmo de Bresenham
En este caso se toma como error la distancia al cuadrado del pixel (x,y) a la circunferencia de centro en el origen y radio r: e=x2+ y2-r2. Si elegimos S el proximo pixel es PS=(x, y+1) entonces: eS = x2+ (y+1)2-r2 = e+2y+1 Si elegimos D, entonces el prximo pixel es PD=(x-1, y+1) eD = (x-1)2+ (y+1)2-r2 = x2-2x +1+y2+2y+1-r2 = eS -2x+1

Algoritmo de Bresenham
Entonces la eleccin del pixel PS o PD depender de cual de los dos errores tiene menor mdulo Si e+2y+1>e+2y+1-2x+1 D

Es lo mismo que Si eS>eS-2x+1 D

Algoritmo de Bresenham
Adems 2x+1 -1 y 0< eS< 1 entonces
Si eS>-eS+2x-1 D y por lo tanto Si 2eS>2x-1 D

El algoritmo utiliza solo operaciones enteras

CirculoBre ssenham ( radio , col )

Algoritmo de Bresenham

{ int x, y, e; x = radio; y = 0; e = 0; while ( y x) { putpixel ( x, y , col ); putpixel ( y , x, col ); putpixel ( x, y , col ); putpixel ( y, x, col ); putpixel ( x, y , col ); putpixel ( y , x, col ); putpixel ( x, y , col ); putpixel ( y , x, col ); e = e + 2 y + 1; y = y + 1; if ( 2e > ( 2 x 1)) { x = x 1; e = e 2 x + 1; } } }

Discretizacin de Polgonos Scan Conversion


El objetivo es encontrar el conjunto de pixels que determinan el rea slida que dicho polgono cubre en la pantalla. El mtodo que se presenta se basa en encontrar la interseccin de todos los lados del polgono con cada lnea de barrido, por eso se llama conversin scan del polgono. Todo polgono plano puede descomponerse en tringulos, luego veremos como dibujar el tringulo lleno.

Discretizacin de Polgonos
Para el algoritmo es necesario dimensionar dos arreglos auxiliares enteros minx y maxx del tamao del alto de la pantalla, que para cada lnea de barrido almacenarn el menor y el mayor x respectivamente.

Discretizacin de Polgonos
Se inicializa minx en + y maxx en - y discretiza cada arista del tringulo con DDA o Bresenham reemplazando la sentencia putpixel por

If x>maxx[y] then maxx[y]=x; If x<minx[y] then minx[y]=x; Para cada y activo graficar una lnea de minx[y] a maxx[y]

Discretizacin de Polgonos
(x2,y2)

(x1,y1)

(x3,y3)

Fin

Anda mungkin juga menyukai