Bresenham desarroll un generador incremental de circunferencias. Este algoritmo
genera todos los puntos de un crculo centrado en el origen. En cada paso el algoritmo selecciona el punto P i (x i ,y i ), el cul es el ms cercano a la verdadera circunferencia y al mismo tiempo hace que el trmino de error D(P i ) sea mas cercano a cero.
D(P i )=(x i 2 +y i 2 )-R 2
La estrategia a seguir es seleccionar el punto ms cercano para usar variables de decisin cuyos valores puedan ser incrementalmente calculados slo con algunas operaciones bsicas como sumas, restas o cambios de signo.
NOTA: Debemos tener en cuenta que trabajamos con una matriz de puntos que no es continua, y por ello tenemos que aproximar lo ms posible los puntos a dibujar, con los puntos de la circunferencia real, obtenidos en la aplicacin de la formula.
Algoritmo de Bresenham Asumimos que P i ha sido seleccionado en el paso anterior como el punto ms cercano a la circunferencia real. En el paso actual, debemos determinar si el punto mas cercano es S i o T i . El trmino de error para estos puntos ser la diferencia de los cuadrados de las distancias al origen del punto y de la circunferencia real. D(S i )=((X i-1 + 1) 2 + (Y i-1 ) 2 ) - R 2
D(T i )=((X i-1 + 1) 2 + (Y i-1 1 )2) - R 2
Si |D(S i )| >= |D(T i )| , entonces T i es ms cercano al crculo real que S i y lo tomamos como un punto de la circunferencia. Podemos definir d i como un trmino de error d i =|D(S i )| - |D(T i )|
Algoritmo de Bresenham Vamos a considerar otro termino de error como d i = D(S i ) + D(T i ) Con este nuevo termino de error y observando la imagen podemos ver que en los casos A y B tanto S i como T i quedan dentro de la circunferencia real, con lo que el trmino d i es negativo y seleccionaremos el punto S i.
En los casos D y E ocurre al contrario. d i
siempre ser positivo con lo que tomaremos el punto T i
El caso ms complejo es el caso C. Aqu S i
queda fuera del crculo, con lo que su trmino de error es positivo, mientras T i queda dentro del crculo y por tanto con un trmino de error negativo. El punto ms cercano al crculo ser T i, si el trmino de error d i es positivo y S i en caso contrario. Algoritmo de Bresenham Podemos comprobar que la variable de decisin d i tal y como la hemos expresado, requiere el clculo de varias multiplicaciones y cuadrados, y por el contrario dijimos anteriormente que el algoritmo slo calcula unas algunas operaciones bsicas como sumas o restas. A partir de aqu vamos a desarrollar el algoritmo de Bresenham. Mediante una serie de manipulaciones algebraicas llegamos a que en el paso 1, el termino de error es d 1 =3 2 R Demostracin.- P 0 = (x 0 ,y 0 ) = (0,R) as S 1 =(1,R) y T 1 =(1,(R-1)) D(S 1 )=(1 2 +R 2 )-R 2 =1 D(T 1 )=(1 2 +(R-1) 2 )-R 2 =1+R 2 -2R+1-R 2 =2-2R d 1 =D(S 1 )+D(T 1 )=1+ 2 + 2R = 3 - 2 R
Algoritmo de Bresenham Como hemos visto, si d i es menor que cero elegimos S i como punto a dibujar, y el siguiente trmino de error ser d i+1 =d i + 4 * X i-1 + 6
d i = ((x i-1 + 1) 2 + y i-1 2 ) - R 2 +((x i-1 + 1) 2 + (y i-1 - 1) 2 ) - R 2
d i+1 = ((x i-1 + 2) 2 + y i-1 2 ) - R 2 + ((x i-1 + 2) 2 + (y i-1 - 1) 2 ) - R 2 = = (x i-1 2 + 4 x i-1 + 4 + y i-1 2 - R 2 ) + (x i-1 2 + 4 x i-1 + 4 + (y i-1 - 1) 2 - R 2 ) Como x i-1 2 + 4 x i-1 + 4 = x i-1 2 + 2 x i-1 + 1 2 x i-1 + 3 = (x i-1 + 1) 2 + 2 x i-1 + 3 Entonces d i+1 = ((x i-1 + 1) 2 + y i-1 2 - R 2 ) + 2 x i-1 + 3 + ((x i-1 + 1) 2 + (y i-1 -1) 2 - R 2 )+2x i-1 + 3 = = D(S i ) + 2 x i-1 + 3 + D(T i ) + 2 x i-1 + 3 = = d i +4 x i-1 +6
Algoritmo de Bresenham Si por el contrario d i es mayor que cero y elegimos T i , nos quedar que el trmino de error es: d i+1 = d i + 4 * (X i+1 Y i-1 ) + 10
d i+1 = (x i-1 + 2) 2 + (y i-1 - 1) 2 - R 2 + (x i-1 + 2) 2 + (y i-1 - 2) 2 - R 2 = = x i-1 2 + 4x i-1 + 4 + y i-1 2 2 y i-1 + 1 - R 2 + x i-1 2 + 4 x i-1 + 4 + y i-1 2 4 y i-1 +4 - R 2 = = (x i-1 + 1) 2 + 2 x i-1 + 3 + y i-1 2 2 y i-1 + 1 - R 2 + (x i-1 + 1) 2 + 2 x i-1 + 3 + (y i-1 -1) 2 - - 2y i-1 + 3 R 2 = = D(S i ) + 2 x i-1 + 3 2 y i-1 + 1 + D(T i ) + 2 x i-1 + 3 2 y i-1 + 3 = = d i + 4 x i-1 4 y i-1 + 10= = d i +4 (x i-1 - y i-1 ) +10
Algoritmo de Bresenham Este resultado algebraico y el consiguiente algoritmo fueron derivados por J. Michener por aplicacin de la metodologa de Bresenham. La expresin para d i
es expandida usando las frmulas de D(S i ) y D(T i ). Sustituyendo i-1 por i, encontramos una expresin para d i.1 . Entonces la diferencia d i d i-1 es formada y evaluada para cada uno de los posibles movimientos. El siguiente procedimiento esta basado en este resultado.
Algoritmo de Bresenham Procedure MICH_CIRCLE (radius,value:integer); {Se supone el centro del crculo en el origen} Var x,y,d:integer; Begin x:=0; y:=radius; d:= 3- 2 * radius; while x<y do begin Circle_Points (x,y,value); if d<0 then d:= d + 4 * x + 6 { Selecciono S} else begin d := d + 4 * (x y) + 10; { Selecciono T decremento de y} y := y 1 end x : = x + 1 end {While} if x = y then Circle_points (x,y,value); End {Mich_Circle} Ejemplo Dado un circulo de radio R=10 Donde P0 = (X0,Y0) = (0,R) = (0,10) Entonces di = 3-2R=3-2(10)= -17 9 7 6 5 4 3 2 1 0 8 9 7 6 5 4 3 2 1 0 8 10 10 i d i