Post on 08-Mar-2016
description
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]