S.E.P
D.G.E.S.T
D.I.T.D.
INSTITUTO TECNOLÓGICO SUPERIOR DE LIBRES Organismo Público Descentralizado del Gobierno del Estado de Puebla
INGENIERÍA EN SISTEMAS COMPUTACIONALES
“EXAMÉN DE UN POLIGONO Y TRIANGULO” MATERIA: GRAFICACIÓN
PRESENTAN: CRISOSTOMO HERNÀNDEZ GUADALUPE
ORTEGA MÉNDEZ JOAQUINA
LIBRES, PUEBLA, FEBRERO DE 2012.
Recursividad: Se puede definir como la llamada al método de la matriz así mismo directa o indirectamente esta puede llevar ciclos infinitos que no son más que condiciones que definen si se llama o no al siguiente método. Además la lógica de la recursividad se basa en intentar simplificar el problema a algo simple y más básico. [1] 1) Realizar el programa polígono a partir del algoritmo DDA para trazado de líneas. a) Mostrar la ejecución de los polígonos.
Figura 1.1 Inserción de coordenadas.
Figura 1.2 Ejecución de coordenadas.
b) Mostrar el código modificado. using using using using using using
System; System.Collections.Generic; System.Linq; System.Text; Tao.FreeGlut; Tao.OpenGl;
namespace Lineas { class Program
{ static Double x1, y1, x2, y2, x3, y3; static Double x5, y5, x6, y6, x7, y7, x8, y8, x9, y9; static void Main(string[] args) { Console.WriteLine("Coordenadas para el triรกngulo"); Console.WriteLine("introduzca el valor de X1"); x1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y1"); y1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de X2"); x2 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y2"); y2 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de X3"); x3 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y3"); y3 = Convert.ToDouble(Console.ReadLine()); //..........otras lineas Console.WriteLine("Coordenadas del pentagono"); Console.WriteLine("introduzca el valor de X4"); x5 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y4ยบ"); y5 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de X5"); x6 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y5"); y6 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de X6"); x7 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y6"); y7 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de X7"); x8 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y7"); y8 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de X8"); x9 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y8"); y9 = Convert.ToDouble(Console.ReadLine()); Glut.glutInit();//funciones propias de opengl Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB); Glut.glutInitWindowSize(800, 480);//creamos una ventana Glut.glutCreateWindow("Algoritmo DDA");//colocamos titulo a la ventana //llamamos a la funcion dda Glut.glutDisplayFunc(dda); Glut.glutMainLoop(); } //Creamos la funcion llamada dda de tipo static y le agregamos el siguiente codigo public static void dda() { //componentes necesarios de opengl Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);//limpia el buffer de la pantall Gl.glColor3f(0.6F, 0.6F, 0.6F);//poner color a los pixeles
Gl.glLoadIdentity();//''muy importante; Gl.glPointSize(6.0f);//medida de los puntos Gl.glBegin(Gl.GL_POINTS);//funcion para dibujar puntos //dibujando el plano float z = -1, w = 1, c = 0; for (int i = 0; i < 200; i++) { Gl.glColor3f(w, c, z); Gl.glVertex2d(z, 0); Gl.glVertex2d(0, w); z += .01f; w -= .01f; c += .1f; } Gl.glEnd();//termina funcion para dibujar puntos ///pasamos las Gl.glPointSize(9.0f);//sirve para el tama単o de los pixeles Gl.glColor3f(0.6f, 1.0f, 0.6f);//sirve para el color de los pixeles ddaDibujar(x1, y1, x2, y2); ddaDibujar2(x2, y2, x3, y3); ddaDibujar3(x3, y3, x1, y1); //........otra figura ddaDibujar4(x9, y9, x8, ddaDibujar5(x8, y8, x7, ddaDibujar6(x7, y7, x6, ddaDibujar7(x6, y6, x5, ddaDibujar8(x5, y5, x9,
y8); y7); y6); y5); y9);
} //Ahora crearemos la funcion ddaDibujar la que llevara el codigo del algoritmo DDA public static void ddaDibujar(double x1,double y1,double x2, double y2) { 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) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadas for (double k = .1; k <= pasos; k += .1) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd();
//termina dda } ////////////MAS PUNTOS public static void ddaDibujar2(double x2, double y2, double x3, double y3) { double xinicial = x2, yinicial = y2, xfinal = x3, yfinal = y3, 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) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadas for (double k = .1; k <= pasos; k += .1) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); //termina dda } //mas puntos public static void ddaDibujar3(double x3, double y3, double x1, double y1) { double xinicial = x3, yinicial = y3, xfinal = x1, yfinal = y1, 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) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadas for (double k = .1; k <= pasos; k += .1) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); //termina dda
} public static void ddaDibujar4(double x9, double y9, double x8, double y8) { double xinicial = x9, yinicial = y9, xfinal = x8, yfinal = y8, 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) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadas for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); //termina dda } public static void ddaDibujar5(double x8, double y8, double x7, double y7) { double xinicial = x8, yinicial = y8, xfinal = x7, yfinal = y7, 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) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadas for (double k = .11; k <= pasos; k += .11) {
x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); //termina dda } public static void ddaDibujar6(double x7, double y7, double x6, double y6) { double xinicial = x7, yinicial = y7, xfinal = x6, yfinal = y6, 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) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadas for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); //termina dda } public static void ddaDibujar7(double x6, double y6, double x5, double y5) { double xinicial = x6, yinicial = y6, xfinal = x5, yfinal = y5, 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) / 10; yincremento = (deltay / pasos) / 10;
x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadas for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); //termina dda } public static void ddaDibujar8(double x5, double y5, double x9, double y9) { double xinicial = x5, yinicial = y5, xfinal = x9, yfinal = y9, 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) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadas for (double k = .11; k <= pasos; k += .11) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); }}}
Bibliografia: Recursividad: Autor: Ernesto Viamontes Calzadilla, Estudios: CiberneticaMatematica (Universidad de la Habana). Lenguajes: C#, C++,C, Python. E-Mail: ev.kaiser@lab.matcom.uh.cu http://dojips.wordpress.com/2009/05/20/c-recursividadernesto-viamontes-calzadilla/ [1]