Download - Algoritmo DDA
![Page 1: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/1.jpg)
INSTITUTO TECNOLÓGICO SUPERIOR DE LIBRES
Organismo Público Descentralizado del Gobierno del Estado de Puebla
INGENIERÍA EN SISTEMAS COMPUTACIONALES
EJECUCIÓN DEL ALGORITMO DDA
PRESENTAN:
LEAL NIETO MARIBEL
RIVERO LÓPEZ PILAR
LIBRES, PUEBLA, DICIEMBRE 2011
![Page 2: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/2.jpg)
ALGORITMO DDA
El algoritmo DDA (Análisis Diferencial Digital) es un algoritmo de digitalización de
líneas basado en circular Sy o Sx utilizando ecuaciones, las líneas se muestran en
intervalos unitarios según las coordenadas y los correspondientes valores enteros
más aproximados al trayecto lineal se calcula para la otra coordenada, es un
método para el cálculo de posiciones de pixeles más rápido que implementar
directamente.
Instalación de librerías
Colocar las librerías en Windows/System como se muestra en la siguiente figura
1.1
Figura 1.1
![Page 3: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/3.jpg)
Crear nuevo proyecto en Visual Studio 2008 en consola como se muestra en la
Figura 1.2
Figuras 1.2
Se abrió el proyecto para el desarrollo del código como se muestra en la Figura
1.3
Figura 1.3
![Page 4: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/4.jpg)
Se agregaron las referencias dentro del proyecto como se muestra en la Figura
1.4
Figura 1.4
Figura 1.5
![Page 5: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/5.jpg)
CODIFICACION Y EJECUCIÓN ALGORITMO DDA
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()); //inicializar para Tao.Opengl Glut.glutInit(); Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB); Glut.glutInitWindowSize(640, 480);// creamos ventana Glut.glutCreateWindow("*************DDA***************"); //termina inicializacion de componentes tao opengl Glut.glutDisplayFunc(Bresen); Glut.glutMainLoop(); public static void Bresen() { //comp necesarios 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); // se dibuja el plano float z = -1, w = 1, c = 0; for (int i = 0; i < 200; i++)
![Page 6: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/6.jpg)
{ 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(1.0f, 0.111f, 1.0f); BresenDibujar(x1, y1, x2, y2); } public static void BresenDibujar(double x1,double y1,double x2,double y2) { double xinicial = x1, yinicial = y1, xfinal = x2, yfinal= y2, x=0, y=0; double deltax, deltay, constanteP,ultimo; deltax = Math.Abs( xfinal - xinicial); deltay =Math.Abs( yfinal - yinicial); constanteP = 2 * deltay - deltax; if (xinicial > xfinal) { x = xfinal; y = yfinal; ultimo = xinicial; } else { x = xinicial; y = yinicial; ultimo = xfinal; } Gl.glBegin(Gl.GL_POINTS); //Gl.glColor3f(1f, 1.0f, .5f); Gl.glVertex2d(x, y); while (x < ultimo) { x += .1; if (constanteP < 0) constanteP +=2 * deltay; else { y += .1; constanteP += 2 * (deltay - deltax); } Gl.glVertex2d(x, y);
![Page 7: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/7.jpg)
} Gl.glEnd(); } } }
![Page 8: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/8.jpg)
Línea punteada
using System;
using System.Collections.Generic;
using System.Text;
using Tao.FreeGlut;
using Tao.OpenGl;
namespace Graficos2
{
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());
//inicializar todo esto para tao opengl
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);
Glut.glutInitWindowSize(640, 480);
Glut.glutCreateWindow("LIENESA PUNTEADA ");
//termina inicializacion de componentes tao opengl
Glut.glutDisplayFunc(Bresen);
Glut.glutMainLoop();
}
public static void Bresen()
{
//componentes necesarios
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glColor3f(0.0F, 0.0F, 1.0F);
Gl.glLoadIdentity();//''muy importante;
///componentes necesarios
Gl.glPointSize(5.0f);//medida de los puntos
Gl.glBegin(Gl.GL_POINTS);
//dibujando el plano
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;
![Page 9: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/9.jpg)
}
Gl.glEnd();
Gl.glPointSize(10.0f);
Gl.glColor3f(1.0f, 0.111f, 1.0f);
BresenDibujar(x1, y1, x2, y2);
BresenDibujar2(x1, y1, x2, y2);
}
public static void BresenDibujar(double x1, double y1, double x2,
double y2)
{
double xinicial = x1, yinicial = y1, xfinal = x2, yfinal =
y2, x = 0, y = 0;
double deltax, deltay, constanteP, ultimo;
deltax = Math.Abs(xfinal - xinicial);
deltay = Math.Abs(yfinal - yinicial);
constanteP = 2 * deltay - deltax;
if (xinicial > xfinal)
{
x = xfinal;
y = yfinal;
ultimo = xinicial;
}
else
{
x = xinicial;
y = yinicial;
ultimo = xfinal;
}
Gl.glBegin(Gl.GL_POINTS);
//Gl.glColor3f(1f, 1.0f, .5f);
Gl.glVertex2d(x, y);
while (x < ultimo)
{
x += .3
;
if (constanteP < 0)
constanteP += 2 * deltay;
else
{
y += .3;
constanteP += 2 * (deltay - deltax);
}
Gl.glVertex2d(x, y);
}
Gl.glEnd();
}
//grosor
public static void BresenDibujar2(double x1, double y1, double
x2, double y2)
{
double xinicial = x1, yinicial = y1, xfinal = x2, yfinal =
y2, x = 0, y = 0;
double deltax, deltay, constanteP, ultimo;
deltax = Math.Abs(xfinal - xinicial);
deltay = Math.Abs(yfinal - yinicial);
constanteP = 2 * deltay - deltax;
![Page 10: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/10.jpg)
if (xinicial > xfinal)
{
x = xfinal;
y = yfinal + 0.04;
ultimo = xinicial;
}
else
{
x = xinicial;
y = yinicial + 0.04;
ultimo = xfinal;
}
Gl.glBegin(Gl.GL_POINTS);
//Gl.glColor3f(0.6f, 0.6f, 0.6f);//djhfklsdj
Gl.glVertex2d(x, y);
while (x < ultimo)
{
x += .09;
if (constanteP < 0)
constanteP += 2 * deltay;
else
{
y += .09;
constanteP += 2 * (deltay - deltax);
}
Gl.glVertex2d(x, y);
}
Gl.glEnd();
}
}
}
Ejecución de línea punteada
![Page 11: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/11.jpg)
Grosor de linea
using System;
using System.Collections.Generic;
using System.Text;
using Tao.FreeGlut;
using Tao.OpenGl;
namespace Graficos2
{
class Program
{
static double x1, y1, x2, y2;
static void Main(string[] args)
{
Console.WriteLine(".........LINEAS CON EL ALGORITMO DDA");
Console.WriteLine("INTRODUSCA EL VALOR DE.... X1");
x1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("INTRODUSCA EL VALOR DE.... Y1");
y1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("INTRODUSCA EL VALOR DE.... X2");
x2 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("INTRODUSCA EL VALOR DE.... Y2");
y2 = Convert.ToDouble(Console.ReadLine());
//inicializar todo esto para tao opengl
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);
Glut.glutInitWindowSize(640, 480);
Glut.glutCreateWindow("ALGOTITMO DDA");
//termina inicializacion de componentes tao opengl
Glut.glutDisplayFunc(Bresen);
Glut.glutMainLoop();
}
public static void Bresen()
{
//componentes necesarios
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glColor3f(0.0F, 0.0F, 1.0F);
Gl.glLoadIdentity();//''muy importante;
///componentes necesarios
Gl.glPointSize(5.0f);//medida de los puntos
Gl.glBegin(Gl.GL_POINTS);
//dibujando el plano
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;
![Page 12: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/12.jpg)
c += .1f;
}
Gl.glEnd();
Gl.glPointSize(10.0f);
Gl.glColor3f(1.0f, 0.111f, 1.0f);
BresenDibujar(x1, y1, x2, y2);
BresenDibujar2(x1, y1, x2, y2);
}
public static void BresenDibujar(double x1, double y1, double x2,
double y2)
{
double xinicial = x1, yinicial = y1, xfinal = x2, yfinal =
y2, x = 0, y = 0;
double deltax, deltay, constanteP, ultimo;
deltax = Math.Abs(xfinal - xinicial);
deltay = Math.Abs(yfinal - yinicial);
constanteP = 2 * deltay - deltax;
if (xinicial > xfinal)
{
x = xfinal;
y = yfinal;
ultimo = xinicial;
}
else
{
x = xinicial;
y = yinicial;
ultimo = xfinal;
}
Gl.glBegin(Gl.GL_POINTS);
//Gl.glColor3f(1f, 1.0f, .5f);
Gl.glVertex2d(x, y);
while (x < ultimo)
{
x += .01;
if (constanteP < 0)
constanteP += 2 * deltay;
else
{
y += .01;
constanteP += 2 * (deltay - deltax);
}
Gl.glVertex2d(x, y);
}
Gl.glEnd();
}
//grosor
public static void BresenDibujar2(double x1, double y1, double
x2, double y2)
{
double xinicial = x1, yinicial = y1, xfinal = x2, yfinal =
y2, x = 0, y = 0;
double deltax, deltay, constanteP, ultimo;
deltax = Math.Abs(xfinal - xinicial);
deltay = Math.Abs(yfinal - yinicial);
constanteP = 2 * deltay - deltax;
![Page 13: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/13.jpg)
if (xinicial > xfinal)
{
x = xfinal;
y = yfinal+0.04;
ultimo = xinicial;
}
else
{
x = xinicial;
y = yinicial+0.04;
ultimo = xfinal;
}
Gl.glBegin(Gl.GL_POINTS);
//Gl.glColor3f(0.6f, 0.6f, 0.6f);//djhfklsdj
Gl.glVertex2d(x, y);
while (x < ultimo)
{
x += .01;
if (constanteP < 0)
constanteP += 2 * deltay;
else
{
y += .01;
constanteP += 2 * (deltay - deltax);
}
Gl.glVertex2d(x, y);
}
Gl.glEnd();
}
}
}
![Page 14: Algoritmo DDA](https://reader034.vdocumento.com/reader034/viewer/2022042523/568c3c091a28ab0235ac611d/html5/thumbnails/14.jpg)
REFERENCIA
Graficación por computadora con OpenGL 3ra edición editorial Donald hearn m.
Pauline Baker indiana university- purdue university
http://gilberto2112.brinkster.net/programaconkarel/Version_Anterior/GraficosPorCo
mputadoraYOPENGL.pdf