12
INSTITUTO TECNOLÓGICO SUPERIOR DE LIBRES Organismo Público Descentralizado del Gobierno del Estado de Puebla ING. EN SISTEMAS COMPUTACIONALES GRAFICACIÓN EJECUCIÓN DEL ALGORITMO DDADOCENTE LIC. DIANA MARICELA GONZÁLEZ DELGADO PRESENTA: HERNÁNDEZ JACINTO MARCO ANTONIO LARIOS VÁZQUEZ EDGAR LIBRES, PUEBLA, 11 DE FEBRERO 2012

ALGORITMO DDA

Embed Size (px)

DESCRIPTION

DESARROLLO Y PRACTICAS DEL ALGORITMO DDA

Citation preview

Page 1: ALGORITMO DDA

INSTITUTO TECNOLÓGICO SUPERIOR DE LIBRES

Organismo Público Descentralizado del Gobierno del Estado de Puebla

ING. EN SISTEMAS COMPUTACIONALES

GRAFICACIÓN

“EJECUCIÓN DEL ALGORITMO DDA”

DOCENTE

LIC. DIANA MARICELA GONZÁLEZ DELGADO

PRESENTA:

HERNÁNDEZ JACINTO MARCO ANTONIO

LARIOS VÁZQUEZ EDGAR

LIBRES, PUEBLA, 11 DE FEBRERO 2012

Page 2: ALGORITMO DDA

1.- Fundamento teórico del algoritmo DDA.

La computación grafica en 2D corresponde al conjunto de técnicas que tienen

como objeto la generación de modelos esto se da mediante modelos

geométricos bidimensionales. De esta manera estas técnicas son empleadas

en interfaces graficas de usuario. Los gráficos vectoriales y de rasterización

conforman las principales categorías de computación grafica en 2D.

Algoritmo DDA para el trazo de líneas.

La ecuación de la inserción de la pendiente cartesiana de una línea es:

(1) y = m x + b

Donde:

m = Pendiente de la línea.

b = Inserción de y.

Dado que los extremos de un segmento de línea se especifica en las

posiciones (x1, y1) (x2, y2), se pueden determinar los valores para la pendiente

y la inserción de y en b con los siguientes cálculos:

(2) m = (y2 – y1) / (x2 – x1)

(3) b = y1 – m x1

Para cualquier x dentro del intervalo ∆x a lo largo de una línea, se puede

calcular el intervalo correspondiente a ∆y a partir de la ecuación (2) como:

(4) ∆y = m ∆x

De modo similar se puede obtener el intervalo ∆x de x correspondientemente a

una ∆y específica como:

(5) ∆x = ∆y / m

Si │m│<1, la línea es mas horizontal que vertical.

Según tiende a cero m, la línea tiende a ser más horizontal.

Si │m│>1, la línea es mas horizontal que vertical.

Page 3: ALGORITMO DDA

Según tiende a infinito a m, la línea tiende a ser vertical.

El siguiente paso es efectuar un muestreo de la línea de puntos discretos

correspondientes a los pixeles más cercanos.

CODIGO DE EJEMPLOS DE TRAZO DE LINEAS PUNTEADAS DE LA

LIBRERÍA OPENGL EN C#

using System;

using System.Collections.Generic;

using System.Text;

using Tao.FreeGlut;

using Tao.OpenGl;

//REALIZADO POR MARCO ANTONIO HERNANDEZ JACINTO Y EDGAR LARIOS

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

//termina inicializacion de componentes tao opengl

Glut.glutDisplayFunc(Bresen);

Glut.glutMainLoop();

}

public static void Bresen()

{

Page 4: ALGORITMO DDA

//componentes necesarios

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);

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

Gl.glLoadIdentity();//''muy importante;

///componentes necesarios

Gl.glPointSize(6.0f);//medida de los puntos

//Gl.glColor3f(0.0f, 1.0f, 0.0f);

//BresenDibujar (.1, .1, 1, 1);

//Gl.glColor3f(1.0f, 0.0f, 1.0f);

//BresenDibujar(.3, .1, .6, .6);

////Gl.glColor3f(1.0f, 0.111f, 1.0f);

//BresenDibujar(-1, -1, .5, 1);

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;

}

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)

{

Page 5: ALGORITMO DDA

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;

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

}

}

}

Page 6: ALGORITMO DDA
Page 7: ALGORITMO DDA
Page 8: ALGORITMO DDA

CODIGO DE EJEMPLOS DE TRAZO DE LINEAS CON GROSOR DE LA

LIBRERÍA OPENGL EN C#

using System;

using System.Collections.Generic;

using System.Text;

using Tao.FreeGlut;

using Tao.OpenGl;

//REALIZADO POR MARCO ANTONIO HERNANDEZ JACINTO Y EDGAR LARIOS

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("LINEA GROSOR");

//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.1F, 0.1F, 0.1F);

// Gl.glLineWidth( 0.34);

Gl.glLoadIdentity();//''muy importante;

///componentes necesarios

Gl.glPointSize(5.0f);//medida de los puntos

//Gl.glColor3f(0.0f, 1.0f, 0.0f);

//BresenDibujar (.1, .1, 1, 1);

//Gl.glColor3f(1.0f, 0.0f, 1.0f);

//BresenDibujar(.3, .1, .6, .6);

////Gl.glColor3f(1.0f, 0.111f, 1.0f);

//BresenDibujar(-1, -1, .5, 1);

Page 9: ALGORITMO DDA

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;

}

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)

{

Page 10: ALGORITMO DDA

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+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 11: ALGORITMO DDA
Page 12: ALGORITMO DDA

FUENTES DE INFOTRMACIÓN

1. http://disi.unal.edu.co/grupos/remixlab/index.php?option=com_

content&view=article&id=4&Itemid=12&lang=es

2. http://opengl.blogspot.es/

Sitios de trabajo

3. http://issuu.com