Está en la página 1de 17

Algoritmo de

Bresenham
para Pintar Crculos
y Cudricas en General
Carlos E. Alvarez D.
06-39141

Contenido
- Introduccin
- Algoritmo de Bresenham para Dibujar Lneas Rectas
- Algoritmo de Bresenham para Dibujar Crculos
- Algoritmo Rpido Basado en Algoritmo de
Bresenham para Dibujar Elipses
- Generalizacin del Algoritmo de Bresenham para
Curvas Cuadrticas
- Resumen de Aplicaciones e Importancia

Introduccin
-

Desarrollado por Jack E. Bresenham en I.B.M. en 1962

Publicado en 1965

Originalmente para dibujar lneas rectas

Modificado posteriormente para dar origen al conocido


Bresenhams Circle Algorithm

Imagen: http://wscg.zcu.cz/wscg2003/Photos_2003/Bresenham.jpg

Bresenham Lneas Rectas


Algoritmo Original
- Para lneas en el primer octante desde p1 = (x1, y1 )
hasta

p2 = (x2 , y2 )

(se traslada para que parta

del origen)
- Decisin E(

) o NE ( )

- El error para un pxel se define como la distancia


vertical entre el pxel y la recta que se quiere dibujar [3,5,6]

Bresenham Lneas Rectas


Algoritmo Original Cont.
-

Se usa el parmetro de decisin


e0 < 0 E

e0 = 2dy 2dx

e0 > 0 NE

El error se calcula de manera incremental, de modo que


ei+1 = ei + 2dy y

si se elige E o NE

ei+1 = ei + 2dy 2dx

respectivamente en el paso anterior,

donde
dx = x2 x1 y

dy = y2 y1
[3,5,6]

Bresenham Lneas Rectas


Algoritmo Original Cont.
dx = x2 - x1
dy = y2 - y1
E = 2 * dy - dx
Dn = E + dx = 2dy
Dp = E - dx = 2dy - 2dx
x = x1
DO WHILE x <= x2
IF E < 0 THEN
E = E + Dn
/* y = y + 0 */
ELSE
E = E + Dp
y = y + 1
END IF
x = x + 1
DrawPoint (x, y)
LOOP

Slo operaciones enteras

[3,5,6]

Bresenham - Crculos
x 0, y 0, x y *
- Se escoge el Arco donde
- Los otros 8 arcos se pintan por simetra (8-way
symmetry)
- Decisin para el prximo pxel: S ( ) o SO ( )
- PS = (x, y+1)
- PSO = (x 1, y+1)
- Se define el error e= x2 + y2 r 2
- eS = x2 + (y+1)2 r 2 = e+ 2y1
- eSO = (x 1)2 + (y+1)2 r 2 = eS + 2x +1
-Se escoge error con menor mdulo
*Ntese

direccin de los ejes


[2,3,5,8]

Bresenham - Crculos
Error y Decisin
eS > eSO SO

eS > eS 2x +1 SO

2x 1 1 0 < es <1

2eS > 2x 1 SO
Slo operaciones enteras
[2,3,5,8]

Bresenham - Elipses
- Ecuacin

x2 y2
+ 2 =1
2
a b

- Se divide en 4 cuadrantes (4-way symmetry)


- Se dibuja primero el arco sealado por 1 y
luego 2
- Decisin
- 1 N ( ) o NO ( )
- 2 E(

) o SE ( )

- Error b2 x2 + a2 y2 = b2 a2
[2,3,6]

Bresenham - Elipses
Error y Decisin
Caso 1

(Caso 2 es anlogo)

eNO < eN NO

2 b2 x2 + a2 y2 b2 a2 + a2 ( 2y+1) + b2 (1 2x) > 0 NO

- En cada paso se chequea si la pendiente de la recta


tangente a la elipse es -1 para cambiarla toma de decisin

- Ntese, solo operaciones enteras


[8]

Bresenham - Cudricas
( x h)

= 4q ( y k)

Ecuacin

Si se coloca el vrtice en el origen la ecuacin


de forma

implcita resultante es

2-way symmetry

f (x, y) = x 4qk
2

[8]

Bresenham - Cudricas
Error y Decisin
- Problema: tangente vara de cero a infinito
- Al igual que con elipses hay que dividir la curva
-

Pendiente va desde 0 hasta 1

Pendiente va desde 1 hasta infinito

- Derivando, se tiene que la pendiente de la


tangente es 1 cuando
x = 2q
[8]

Bresenham - Cudricas
Error y Decisin
- Caso 1
- Error inicial e0 = x2 + 2x +1 4qy 2q
- Decisin E(

) o NE ( )

- E ei+1 = ei + 2x + 3
- NE e = e + 2x + 3 4q
i+1
i

4q
[8]

Bresenham - Cudricas
Error y Decisin
- Caso 2
1
2
- Error inicial e0 = x + x + 4qy 4q

- Decisin N( ) o NE ( )
- N ei+1 = ei 8q
- NE ei+1 = ei + 3x + 2
Slo operaciones enteras en el clculo iterativo
[8]

Bresenham
Importancia y Aplicaciones
-

Preciso, cculo incremental usando adicin, sustraccin


y shifting (operaciones enteras), las cuales son standard
en la mayora de las arquitecturas. Muy eficiente

Para dibujo de lneas rectas, crculos, elipses,


polinomios de segundo grado, curvas de Bzier 3er
orden (grado 2) o mayor si se dividen en subcurvas de
3er orden.

Bresenham
Importancia y Aplicaciones
- Implementado en plotters, en el firmware o
hardware de la mayora de las tarjetas grficas
modernas y en muchas libreras grficas.
- Hay que modificarlo para lograr anti-aliasing

Referencias
[1] Wikipedia (material consultado mas no citado):
http://es.wikipedia.org/wiki/Algoritmo_de_Bresenham
http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm
[2] http://materias.fi.uba.ar/6671/primitivas_graficas2.pdf
[3] http://free.pages.at/easyfilter/bresenham.html
[4] http://www.differencebetween.com/difference-between- dda-and-vs-bresenhamalgorithm/
[5] Laura M. Castro Souto, Grficos en Computacin. Curso 2000/2001. Disponible
en:

http://www.madsgroup.org/~laura/recursos-ii/GC.pdf

[6] John Kennedy, A Fast Bresenham Type Algorithm for Drawing Ellipses.
Disponible en:
http://homepage.smc.edu/kennedy_john/belipse.pdf
[7] http://www.abreojosensamblador.net/html/Pags/Cap23.html
[8] http://www.cs.colostate.edu/~cs410/lectures/L12_bresenham2.pdf

También podría gustarte