8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 1/17
Algoritmo de
Bresenhampara Pintar Círculos
y Cuádricas en General
Carlos E. Alvarez D.
06-39141
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 2/17
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
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 3/17
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
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 4/17
Bresenham – Líneas Rectas
- Para líneas en el primer octante desde
hasta (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
Algoritmo Original
p 2 = (x
2, y
2)
p 1 = (x 1, y 1)
[3,5,6
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 5/17
Bresenham – Líneas Rectas
- Se usa el parámetro de decisión
- y
- El error se calcula de manera incremental, de modo quey
si se elige E o NE respectivamente en el paso anterior,
donde
y
Algoritmo Original Cont.
i +1 = e i + 2 i +1 = i +2dy −2 x
dx = x 2 − x
1 dy = y
2 − y
1
0 = 2dy − 2d
0 < 0 ⇒ E
0 > 0 ⇒
[3,5,6
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 6/17
Bresenham – Líneas RectasAlgoritmo Original Cont.
dx = x2 - x1dy = y2 - y1
E = 2 * dy - dx
Dn = E + dx = 2dy
Dp = E - dx = 2dy - 2dx
x = x1DO 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
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 7/17
Bresenham - Círculos- Se escoge el Arco donde *
- Los otros 8 arcos se pintan por simetría ( 8-waysymmetry )- Decisión para el próximo píxel: S () o SO ()
--
- Se define el error--
-Se escoge error con menor módulo
* Nótese dirección de los ejes
≥ 0, y ≥ 0, ≥
e = x 2 + y 2 − r 2
P S =(x , y
+1)
P SO = ( −1, y +1)
e S =
x
2+ (
y +1)
2−
r
2=
e +2
y −1
e SO = (x −1)2 + (y +1)2 − r 2 = e S + 2x +1
[2,3,5,!
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 8/17
Bresenham - Círculos
e S > e SO ⇒ SO
e S > e S −2x +1 ⇒ SO
2 S > 2 −1⇒
⇔
−2x −1≤ −1∧0 < e s <1⇔
Sólo operaciones enteras
Error y Decisión
[2,3,5,!
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 9/17
- Ecuación
- 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
Bresenham - Elipsesx 2
2 +
y 2
2 =1
b
2
x
2+
a
2
y
2=
b
2
a
2
[2,3,6
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 10/17
Caso 1
Bresenham - ElipsesError y Decisión
e NO < e N ⇒ NO
2 b 2x 2 +a 2y 2 −b 2a 2 +a 2 2y +1( ) +b 2 1−2x ( ) > 0 ⇒ NO
⇔
⇔
- En cada paso se chequea si la pendiente de la rectatangente a la elipse es -1 para cambiarla toma de decisión
- Nótese, solo operaciones enteras
(Caso 2 es análogo)
[!
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 11/17
Bresenham - Cuádricas- Ecuación
- Si se coloca el vértice en el origen la ecuación
de forma implícita resultante es
- 2-way symmetry
x −h ( )2= 4q y −k ( )
f (x , y ) = x 2 − 4qk
[!
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 12/17
Bresenham - Cuádricas
- Problema: tangente varía de cero a infinito
- Al igual que con elipses hay que dividir la curva
= 2
- 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
Error y Decisión
[!
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 13/17
Bresenham - Cuádricas
- Caso 1e 0 = x 2 +2x +1− 4qy −2q
Error y Decisión
- Error inicial
- Decisión E() o NE ()-
-
⇒ i +1 = i +2 +3
⇒ i +1 = i +2x +3− 4
[!
" #$
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 14/17
Bresenham - Cuádricas
- Caso 2e 0 = x 2 + x +
1
4− 4qy − 4q
Error y Decisión
- Error inicial
- Decisión N() o NE ()
-
-
⇒ i +1 = i −8
⇒ i +1 =
i +
3 +
2
[!
Sólo operaciones enteras en el cálculo iterativo
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 15/17
BresenhamImportancia 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 3erorden (grado 2) o mayor si se dividen en subcurvas de
3er orden.
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 16/17
BresenhamImportancia 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
8/16/2019 Bresenham Alvarez Dibujar Trayectorias
http://slidepdf.com/reader/full/bresenham-alvarez-dibujar-trayectorias 17/17
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