)
-Crculo -Area pintada
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; } }
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
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
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
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