Issuu on Google+

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 using using using using using

System; System.Collections.Generic; System.Linq; System.Text; Tao.FreeGlut; 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 using using using using using

System; System.Collections.Generic; System.Linq; System.Text; Tao.FreeGlut; 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


Actividad 3