Actividad de Examen

Post on 08-Mar-2016

219 views 0 download

description

dibujando poligonos con opengl

Transcript of Actividad de Examen

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 LOS VALORES PARA EL

POLIGONO");

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());

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]