Algoritmo DDA

14
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

description

Es un algoritmo de digitalización de líneas

Transcript of Algoritmo DDA

Page 1: Algoritmo DDA

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

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

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

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

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

{ 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

} Gl.glEnd(); } } }

Page 8: Algoritmo DDA

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

}

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

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

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

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

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

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