Sunteți pe pagina 1din 10

Algoritmo de Bresenham

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

(x
i+1
,y
i+1
)
0
1
2
3
4
5
6
7
-17
-11
-1
13
-5
17
11
13
(0,10)
(1,10)
(2,10)
(3,10)
(4,9)
(5,9)
(6,8)
(7,7)

Ejemplo

S-ar putea să vă placă și