actividad 3

10
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 MATERIA: GRAFICACIÓN POR COMPUTADORAPRESENTA: DÍAZ ROJAS VIANEY VALDÉZ PÉREZ ROSALINA LIBRES, PUEBLA, FEBRERO 2012

Upload: vianey-diaz

Post on 07-Mar-2016

214 views

Category:

Documents


2 download

DESCRIPTION

Presenta: Vianey Díaz rojas Rosalina Valdéz Pérez

TRANSCRIPT

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

MATERIA:

“GRAFICACIÓN POR COMPUTADORA”

PRESENTA:

DÍAZ ROJAS VIANEY

VALDÉZ PÉREZ ROSALINA

LIBRES, PUEBLA, FEBRERO 2012

1. Definir el algoritmo DDA para el trazo de líneas

El analizador diferenciador digital (DDA - Digital Differential Analyzer) es un

algoritmo de conversión de rastreo que se basa en el cálculo ya sea de Dy o Dx

por medio de las ecuaciones (4) o (5).

Se efectúa un muestreo de la línea en intervalos unitarios en una coordenada y se

determina los valores enteros correspondientes más próximos a la trayectoria de

la línea para la otra coordenada. [1]

2. Instalación de opengl instalar visual studio 2008 o visual c# 2008

Librería de clases The tao framework

Carpeta lib el archivo llamado freeglut.dll

Agregar las referencias hacia los archivos Tao.FreeGlut.dll y Tao.OpenGl.dll

Funcionamiento del algoritmo correcto

3. Trazo de líneas Trazo de línea aumento del grosor

Codificación

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Tao.FreeGlut;

using Tao.OpenGl;

namespace ConsoleApplication1

{

class Program

{

static double x1, y1, x2, y2;

static void Main(string[] args)

{

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

Glut.glutInit();

Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);

Glut.glutInitWindowSize(640, 480);

Glut.glutCreateWindow("Algoritmo DDA Grosor de la línea");

Glut.glutDisplayFunc(dda);

Glut.glutMainLoop();

}

public static void dda()

{

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);

Gl.glColor3f(0.6F, 0.6F, 0.6F);

Gl.glLoadIdentity();

Gl.glPointSize(2.0f);

Gl.glBegin(Gl.GL_POINTS);

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

Gl.glPointSize(5.0f);

Gl.glColor3f(0.6f, 1.0f, 0.6f);

ddaDibujar(x1, y1, x2, y2);

}

public static void ddaDibujar(double x1, double y1, double x2,

double y2)

{

double xinicial = x1, yinicial = y1, xfinal = x2, yfinal =

y2, x, y, xG, yG;

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;

xG = xinicial;

yG = yinicial;

Gl.glBegin(Gl.GL_POINTS);

Gl.glVertex2d(x, y);

Gl.glVertex2d(xG, yG);

for (double k = .1; k <= pasos; k += .01)

{

x = (x + xincremento);

y = (y + yincremento);

Gl.glVertex2d(x+.01, y-.01);

Gl.glVertex2d(x, y);

}

Gl.glEnd();

}

}

}

Trazo de línea punteada

Codificación

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Tao.FreeGlut;

using Tao.OpenGl;

namespace ConsoleApplication1

{

class Program

{

static double x1, y1, x2, y2;

static void Main(string[] args)

{

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

Glut.glutInit();

Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);

Glut.glutInitWindowSize(640, 480);

Glut.glutCreateWindow("Algoritmo DDA");

Glut.glutDisplayFunc(dda);

Glut.glutMainLoop();

}

public static void dda()

{

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);

Gl.glColor3f(0.6F, 0.6F, 0.6F);

Gl.glLoadIdentity();

Gl.glPointSize(2.0f);

Gl.glBegin(Gl.GL_POINTS);

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

Gl.glPointSize(5.0f);

Gl.glColor3f(0.6f, 1.0f, 0.6f);

ddaDibujar(x1, y1, x2, y2);

}

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

for (double k = .1; k <= pasos; k ++ .2)

{

x = (x + xincremento);

y = (y + yincremento);

Gl.glVertex2d(x, y);

}

Gl.glEnd();

}

}

}

[1] http://cannes.itam.mx/Alfredo/Espaniol/Cursos/Grafica/Linea.pdf