Este algoritmo se encarga de determinar los puntos que deben ser usados en un raster n-dimensional con el fin de obtener una aproximacion lo mas cercana a una linea recta entre dos puntos. Su principal caracteristica es realizar calculos con los numeros enteros.
Algo de historia…
Jack Elton Bresenham desarrollo este algoritmo en 1962 para IBM, con el fin de poder dibujar sobre un ploter de Calcomp (es de los primeros dispositivos con salida grafica que estuvo a la venta). El uso libre de copias de los programas entre empleados de la misma empresa permitio que algunos compa;eros de Bresenham le pidieran permiso para presentarlo en nombre de el en una convencion de la ACM que se realizaria en Denver (CO) en 1963, a lo cual acepto y para 1965 salio impreso el paper por primera vez.
El algoritmo de Bresenham fue extendido con el fin de no solo producir lineas, si no tambien circulos.
Algoritmo
Podemos trazar una linea recta con un lapiz en un pedazo de papel sin problemas, sin preocupaciones de como la podemos representar, pero si estamos en un sistema que consiste de pixeles en donde la minima unidad que podemos pintar es un pixel, representar nuestra linea se vuelve algo complejo pues ya no va a ser una linea perfecta y adicionalmente tenemos que tomar la decision de que pixeles debemos pintar con el fin de que se parezca lo mejor posible a la linea imaginaria que deseamos hacer.
Ahora bien, de que manera determinamos que pixeles pintar?
Consideremos el proceso de conversion para lineas con pendiente positiva 0 < m < 1
, comenzando desde el punto mas a la izquierda de la linea en cuestion, y mediante un proceso secuencial vamos a ir mirando que pixel pintar en la siguiente columna (esto se determina mirando que pixel esta mas cerca a la linea trazada). Para lo ultimo, es necesario que que realicemos un muestreo en x
y en y
(pueden ser los valores medios de cada pixel) con el fin de obtener otra cuadricula y asi facilitar la determinacion de que pixel esta mas cerca para un punto en especifico.
Comencemos asumiendo que el pixel que acabamos de pintar esta en la coordenada
y ahora tenemos que decidir que pixel pintar, entre
Es decir, tendriamos algo como se muestra en la siguiente imagen
Ahora, calculemos la coordenada de y
de la linea en la columna de los pixeles x_k + 1
De ahi obtenemos d_1
y d_2
realizando aritmetica sobre la ecuacion de la linea presentada anteriormente
La diferencia entre las dos separaciones entonces es
Para definir un parametro de decision p_k
para la iteracion k en el algoritmo, se obtiene si se reorganiza la ecuacion de tal manera que solo se tengan que realizar calculos enteros. Esto se logra expresando la pendiente m
, segun su definicion, como la division entre la diferencia de y
y la diferencia de x
, asi
Con esto, el signo de p_k
es igual que el de la diferencia entre d_1-d_2
, por lo tanto podemos definir lo siguiente
Por ultimo, si intentamos buscar el parametro para pasos siguientes podemos expresar p_k+1
como sigue
Entonces de esta manera ponemos saber que pixeles vamos pintando con el uso de operaciones que no requieren divisiones, y en donde se pueden definir facilmente los parametros.
|
|