Page 1

INSTITUTO TECNOLÓGICO SUPERIOR DE LIBRES Organismo Público Descentralizado del Gobierno del Estado de Puebla

INGENIERÍA EN SISTEMAS COMPUTACIONALES

GRAFICACIÓN ACTIVIDAD No. 3

DOCENTE: DIANA M. GONZÁLEZ DELGADO

PRESENTA: AMALIA AVILES NABOR SÁNCHEZ APOLINAR ALDO

LIBRES, PUEBLA, FEBRERO DE 2012.


1 Explicación del Algoritmo de DDA Es un algoritmo que se basa en el cálculo y la evaluación de un Delta X (X) y un Delta Y (Y). Por medio de las siguientes ecuaciones.

DeltaX = DeltaY / m DeltaY = m * DeltaX

Se efectúa un muestreo de la línea en intervalos unitarios en una coordenada y se determinan los valores enteros correspondientes más próximos a la trayectoria de la línea para la siguiente coordenada.

Figura 1.1. Trayectoria de la línea

Se aceptan como datos de entradas las dos posiciones de los pixeles correspondientes a los extremos de la línea P1 (Xinicial, Yinicial) y P2(Xfinal,Yfinal). Las diferencias horizontal y vertical entre las posiciones de los extremos dados, se asignan a las variables DeltaX y DeltaY respectivamente. La diferencia con la mayor magnitud determina el valor del parámetro Pasos. Se procede a determinar la compensación necesaria (incremento), para generar la posición del pixel siguiente a lo largo de la trayectoria de la línea. Luego, se ilumina la posición en la pantalla. y se repite este proceso cíclico Pasos Veces, hasta obtener la línea deseada.


Pseucodigo

Leer Coordenadas P1(Xinicial, Yinicial) Leer Coordenadas P2(Xfinal,Yfinal) Asignar a DeltaX la diferencia de Xfinal - Xinicial Asignar a DeltaY la diferencia de Yfinal - Yinicial Si ABS( DeltaX) > ABS(DeltaY) Asignar a Pasos el ABS(DeltaX) De lo contrario Asignar a Pasos el ABS(DeltaY) Asignar a Xincremento el resultado de DeltaX / Pasos Asignar a Yincremento el resultado de DeltaY / Pasos Asignar a X el valor de Xinicial Asignar a Y el valor de Yinicial Iluminar pixel en coordenada X,Y Desde k=1 hasta Pasos Asignar a X la suma de X + Xincremento Asignar a Y la suma de Y + Yincremento Iluminar pixel en Coodenada X,Y Fin de Algoritmo(DDA)


2 Una vez teniendo importadas las librer铆as necesarias y las referencias en el programa al ejecutar el algoritmo muestra una graficaci贸n como la que se muestra en la siguiente figuras 2.1, 2.2

Figura 2.1. Pantalla para introducir valores

Figura 2.1. Graficaci贸n de una l铆nea punteada.


EJEMPLO //empieza dda double xinicial = x1, yinicial = y1, xfinal = x2, yfinal = y2,x,y; double deltax, deltay, xincremento, yincremento; double pasos; deltax = xfinal - xinicial; deltay = yfinal - yinicial; if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 5; //xincremento = xincremento / 2; yincremento = (deltay / pasos) / 5; //yincremento = yincremento / 2; x = xinicial; y = yinicial;


3

Figura 3.1. Aumento de grosor

EJEMPLO //empieza dda double xinicial = x1, yinicial = y1, xfinal = x2, yfinal = y2,x,y; double deltax, deltay, xincremento, yincremento; double pasos; deltax = xfinal - xinicial; deltay = yfinal - yinicial; if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 5; //xincremento = xincremento / 2; yincremento = (deltay / pasos) / 5; //yincremento = yincremento / 2; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); //Gl.glColor3f(1f, 1.0f, .5f); Gl.glPointSize(4.5f);


//C贸digo para aumentar el grosor Gl.glLineWidth(2.0f); Gl.glVertex2d(x, y); for (double k = .1; k <= pasos; k += .1) { x = (x + xincremento); y = (y + yincremento); Gl.glLineWidth(2.0f); Gl.glVertex2d(x, y); } Gl.glEnd(); //termina dda //--------------------------------------------------1 double x11,y11; x11 = xinicial + 0.01; y11 = yinicial + 0.01; Gl.glBegin(Gl.GL_POINTS); Gl.glColor3f(1f, 1.0f, .5f); Gl.glVertex2d(x11, y11); for (double k = .1; k <= pasos; k += .1) { x11 = (x11 + xincremento); y11 = (y11 + yincremento); Gl.glVertex2d(x11, y11); } Gl.glEnd(); //--------------------------------------------------1 //--------------------------------------------------2 double x111, y111; x111 = xinicial + 0.02; y111 = yinicial + 0.02; Gl.glBegin(Gl.GL_POINTS); //Gl.glColor3f(1f, 1.0f, .5f); Gl.glVertex2d(x111, y111); for (double k = .1; k <= pasos; k += .1) { x111 = (x111 + xincremento); y111 = (y111 + yincremento); Gl.glVertex2d(x111, y111); } Gl.glEnd(); //--------------------------------------------------2 } } }


FUENTES DE INFORMACIÓN

1.- Gráficos por computadora con OpenGL, tercera edición, Donald Hearn M. Pauline Paker, Edit. Pearson Prentice Hall

Actividad3  

Línea punteada y grosor

Advertisement