Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DibujoLineasDDA Blanco Arevalo
DibujoLineasDDA Blanco Arevalo
DibujoLineasDDA Blanco Arevalo
Contenido
Lneas
La Recta es una sucesin infinita o continua de puntos alineados en una sola direccin. Es una de las primitivas bsicas en Computacin Grfica Viene dada por la ecuacin Y=mX+b , donde m es la pendiente de la recta y b es el corte con el eje Y.
B
A Figura 1
Lneas
Para dibujar la recta hay que hallar todos los puntos medios entre el inicial y el final. El problema es que la ubicacin de cada pixel se representa con un entero y las posiciones halladas mediante la ecuacin son valores reales. Por lo tanto, se necesitan formas eficientes de dibujar la recta lo ms parecida posible a la realidad, a pesar de las limitaciones que las pantallas de pxeles nos pongan.
La secuencia de pxeles debe ser lo ms recta que se pueda. Las lneas deben tener el mismo grosor e intensidad sin importar el grado de inclinacin Las lneas deben dibujarse lo ms rpido posible
Algoritmo Ineficiente
Algoritmo: Se calcula m (pendiente) Calculo de b (pto de corte en el eje Y) Para x=x0 hasta x=xn y = mx + b Dibujar pixel (x,redondear(y))
Se necesita una multiplicacin flotante, una suma y un redondeo por cada paso
Algoritmo DDA
Pseudo Cdigo
Funcin DDA_Line (int X0, y0, x1, y1) Dx = x1 - x0 Dy = y1 y0 Si |Dx| > |Dy| entonces pasos = |Dx| Si no pasos = |Dy| xinc = Dx / pasos yinc = Dy / pasos x = x0 y = y0 Dibujar Pixel (redondear(x), redondear(y)) Para k=1 hasta k = pasos x = x + xinc y = y + yinc Dibujar Pixel (redondear(x), redondear(y))
Problemas DDA
Algoritmo Breseham
Calcula cul de dos pxeles es el ms cercano a la trayectoria de una lnea. El pixel (Xk, Yk) se divide en (Xk+1, Yk) y (Xk+1, Yk+1) y hay que decidir cul pintar, cualculando la distancia vertical entre el centro de cada pixel y la lnea real.
Algoritmo Bresenham
Pseudo Cdigo
Funcin Bresenham (int X0, y0, x1, y1) // para el caso 0 < m < 1, siendo x0 < x1 Dibujar Pixel (x0, y0) Calculamos: A=2y B=2y-2x Obtener el valor para p0 = 2y-x Para cada Xk sobre la lnea si pk < 0 Dibujar Pixel (xk+1, yk) pk+1 = pk + A si pk > 0 Dibujar Pixel (xk+1, yk+1) pk+1 = pk + B
Si m > 1: intercambiamos x e y Si m < 0: el cambio es similar
Cdigo Bresenham
public void Bresenham(Graphics g,int x0, int y0, int x1, int y1) int x, y, dx, dy, p, incE, incNE, sx, sy; dx = (x1 - x0); dy = (y1 - y0); /* Se determina el punto para comenzar, y para terminar */ if (dy < 0) { dy = -dy; Sy = -1; } else sy = 1; if (dx < 0) { dx = -dx; Sx = -1; } else sx = 1; x = x0; y = y0; g.drawLine( x0, y0, x0, y0);
Anti-Aliasing
Aliasing es la apariencia de escaleras o escalones que se forman debido a la discretizacin de lo pxeles. Propuesta Hardware: - Mayor resolucin - Pxeles ms pequeos
Algoritmo Xiaolin Wu
Mejora del algoritmo de Bresenham, para dibujar rectas en dispositivos de grficos rasterizados de manera que se reduzca el aliasing. Esta basado en dibujar parejas de pxeles a lo largo del trazado de la lnea con diferentes intensidades, en funcin de la a la recta real.
Referencias
Tema 2 - Primitivas 2D. Recuperado Noviembre 8, 2011 de www2.dis.ulpgc.es/~ii-fgc/Tema%202%20-%20Primitivas%202D.pdf Algoritmo DDA Analizador Diferencial Digital. Recuperado Noviembre 8, 2011 de http://maiki69.tripod.com/DDA.htm Rosetta Code - Xiaolin Wu's Line Algorithm . Recuperado Noviembre 8, 2011 de http://rosettacode.org/wiki/Xiaolin_Wu%27s_line_algorithm Medelln Anaya, Hctor E. Algoritmo basado en la ecuacin de la recta. Recuperado Noviembre 8, 2011 de http://galia.fc.uaslp.mx/~medellin/Applets/LineasRectas/Recta.htm Algoritmo DDA . Recuperado Noviembre 8, 2011 http://sites.google.com/site/proyectosroboticos/algoritmo-dda de
Gmez, Francisco (Febrero 16, 2011) - Una breve introduccin a Antialiasing. Recuperado Noviembre 8, 2011 de www.cimat.mx/~cesteves/cursos/cg/pdf/Antialiasing.pdf