actividad 3
DESCRIPTION
Presenta: Vianey Díaz rojas Rosalina Valdéz PérezTRANSCRIPT
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
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();
}
}
}
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