Está en la página 1de 17

Algoritmo de

Bresenham
para Pintar Círculos
y Cuádricas en General

Carlos E. Alvarez D.
06-39141
Contenido
- Introducción
- Algoritmo de Bresenham para Dibujar Líneas Rectas
- Algoritmo de Bresenham para Dibujar Círculos
- Algoritmo Rápido Basado en Algoritmo de
Bresenham para Dibujar Elipses
- Generalización del Algoritmo de Bresenham para
Curvas Cuadráticas
- Resumen de Aplicaciones e Importancia
Introducción

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

- Publicado en 1965

- Originalmente para dibujar líneas rectas

- Modificado posteriormente para dar origen al conocido

Bresenham’s Circle Algorithm

Imagen: http://wscg.zcu.cz/wscg2003/Photos_2003/Bresenham.jpg
Bresenham – Líneas Rectas
Algoritmo Original
- Para líneas en el primer octante desde p1 = (x1, y1 )

hasta p2 = (x2 , y2 ) (se traslada para que parta

del origen)

- Decisión E( ) o NE ( )

- El error para un píxel se define como la distancia

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


Bresenham – Líneas Rectas
Algoritmo Original Cont.
- Se usa el parámetro de decisión e0 = 2dy− 2dx
- e0 < 0 ⇒ E y e0 > 0 ⇒ NE
- El error se calcula de manera incremental, de modo que
ei+1 = ei + 2dy y ei+1 = ei + 2dy− 2dx
si se elige E o NE respectivamente en el paso anterior,
donde
dx = x2 − x1 y dy = y2 − y1

[3,5,6]
Bresenham – Líneas 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
Sólo operaciones enteras
[3,5,6]
Bresenham - Círculos
- Se escoge el Arco donde x ≥ 0, y ≥ 0, x ≥ y *
- Los otros 8 arcos se pintan por simetría (8-way
symmetry)
- Decisión para el próximo píxel: 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+ 2y−1
- eSO = (x −1)2 + (y+1)2 − r 2 = eS + 2x +1
-Se escoge error con menor módulo

*Nótese dirección de los ejes


[2,3,5,8]
Bresenham - Círculos
Error y Decisión
eS > eSO ⇒ SO

eS > eS − 2x +1 ⇒ SO
⇔ −2x −1 ≤ −1∧ 0 < es <1

2eS > 2x −1 ⇒ SO

Sólo operaciones enteras


[2,3,5,8]
Bresenham - Elipses
x2 y2
- Ecuación 2
+ 2 =1
a b
- Se divide en 4 cuadrantes (4-way symmetry)
- Se dibuja primero el arco señalado por 1 y
luego 2
- Decisión
- 1 N ( ) o NO ( )
- 2 E( ) o SE ( )
- Error b2 x2 + a2 y2 = b2 a2
[2,3,6]
Bresenham - Elipses
Error y Decisión
Caso 1 (Caso 2 es análogo)
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 decisión

- Nótese, solo operaciones enteras


[8]
Bresenham - Cuádricas
( x − h) = 4q ( y− k)
2
- Ecuación
- Si se coloca el vértice en el origen la ecuación
de forma implícita resultante es
- 2-way symmetry f (x, y) = x − 4qk
2

[8]
Bresenham - Cuádricas
Error y Decisión

- Problema: tangente varía de cero a infinito


- Al igual que con elipses hay que dividir la curva

- 1 Pendiente va desde 0 hasta 1


- 2 Pendiente va desde 1 hasta infinito

- Derivando, se tiene que la pendiente de la


tangente es 1 cuando x = 2q
[8]
Bresenham - Cuádricas
Error y Decisión
- Caso 1
- Error inicial e0 = x2 + 2x +1− 4qy− 2q
- Decisión E( ) o NE ( )
- E ⇒ ei+1 = ei + 2x + 3
- NE ⇒ e = e + 2x + 3− 4q
i+1 i

– 4q

[8]
Bresenham - Cuádricas
Error y Decisión
- Caso 2
1
- Error inicial e0 = x + x + − 4qy− 4q
2

4
- Decisión N( ) o NE ( )
- N ⇒ ei+1 = ei − 8q
- NE ⇒ ei+1 = ei + 3x + 2

Sólo operaciones enteras en el cálculo iterativo


[8]
Bresenham
Importancia y Aplicaciones
- Preciso, cáculo incremental usando adición, sustracción
y shifting (operaciones enteras), las cuales son standard
en la mayoría de las arquitecturas. Muy eficiente
- Para dibujo de líneas rectas, círculos, elipses,
polinomios de segundo grado, curvas de Bézier 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 mayoría de las tarjetas gráficas
modernas y en muchas librerías gráficas.
- 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-bresenham-
algorithm/
[5] Laura M. Castro Souto, Gráficos en Computación. 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