Page 1

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

“GRAFICACIÓN”

EXAMEN

PRESENTA: LARIOS VÁZQUEZ EDGAR

LIBRES, PUEBLA, FEBRERO DE 2012.


CONCEPTO DE RECURSIVIDAD [1] La recursividad es una técnica de diseño de algoritmos que se basa en solucionar versiones más pequeñas de un problema para de esta manera se pueda encontrar la solución general. Existen dos tipos de algoritmos recursivos: recursión directa y recursión indirecta.

Esta actividad fue realizada en la plataforma libre MonoDevelop de Ubuntu por lo cual no se encontró la correcta ubicación de las coordenadas.


using System; using Tao.FreeGlut; using Tao.OpenGl;

namespace EXAMEN { class Program { static double x1, y1, x2, y2, x3, y3; static double x4, y4, x5, y5, x6, y6,x7,y7,x8,y8; static void Main(string[] args) { Console.WriteLine("INTRODUZCA LOS VALORES PARA PINTAR EL TRIANGULO"); 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()); //pidiendo valores para el poligono Console.WriteLine("INTRODUZCA POLIGONO");

LOS

VALORES

Console.WriteLine("introduzca el valor de X1"); x4 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y1"); y4 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de X2"); x5 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y2"); y5 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de X3"); x6 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y3"); y6 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de X4"); x7 = Convert.ToDouble(Console.ReadLine());

PARA

EL


Console.WriteLine("introduzca el valor de Y4"); y7 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de X5"); x8 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("introduzca el valor de Y5"); y8 = Convert.ToDouble(Console.ReadLine());

Glut.glutInit();//funciones propias de opengl Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB); Glut.glutInitWindowSize(840, 680);//creamos una ventana Glut.glutCreateWindow("**************Algoritmo DDA**************");//colocamos titulo a la ventana //llamamos a la funcion dda Glut.glutDisplayFunc(dda); Glut.glutMainLoop(); } public static void dda() { //componentes necesarios de opengl Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);//limpia el buffer de la pantalla Gl.glColor3f(0.6F, 0.6F, 0.6F);//poner color a los pixeles Gl.glLoadIdentity();//''muy importante; Gl.glPointSize(4.0f);//medida de los puntos Gl.glBegin(Gl.GL_POINTS);//funcion para dibujar puntos //dibujando el plano float z = -1, w = 1, c = 1; 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 //para dibujar el triangulo ddaDibujar(x1, y1, x2, y2); ddaDibujar(x2, y2, x3, y3); ddaDibujar(x3, y3, x1, y1); //para dibujar el poligono ddaDibujar(x4, y4, x5, y5); ddaDibujar(x5, y5, x6, y6); ddaDibujar(x6, y6, x7, y7); ddaDibujar(x7, y7, x8, y8); ddaDibujar(x8, y8, x4, y4);

} 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 = .11; k <= pasos; k += .11) {

x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd();


//termina dda

}

public static void ddaDibujar1(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 = .11; k <= pasos; k += .11) {

x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); //termina dda

}

public static void ddaDibujar2(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 = .11; k <= pasos; k += .11) {

x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); //termina dda

}

//pintar poligono public static void ddaDibujar3(double x4, double y4, double x5, double y5) { double xinicial = x4, yinicial = y4, 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 ddaDibujar4(double x5, double y5, double x6, double y6) { double xinicial = x5, yinicial = y5, 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 ddaDibujar5(double x6, double y6, double x7, double y7) { double xinicial = x6, yinicial = y6, 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 x8, double y8) { double xinicial = x7, yinicial = y7, 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 ddaDibujar7(double x8, double y8, double x4, double y4) { double xinicial = x8, yinicial = y8, xfinal = x4, yfinal = y4, 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

}

} }


Fuente de informaci贸n

http://www.infor.uva.es/~belar/Ampliacion/Curso%202008_2009/T2_Programac ion_Recursiva.pdf [1]

Actividad de Examen  

dibujando poligonos con opengl