ALGORITMO DDA

  • View
    214

  • Download
    2

Embed Size (px)

DESCRIPTION

DESARROLLO Y PRACTICAS DEL ALGORITMO DDA

Transcript

  • INSTITUTO TECNOLGICO SUPERIOR DE LIBRES

    Organismo Pblico Descentralizado del Gobierno del Estado de Puebla

    ING. EN SISTEMAS COMPUTACIONALES

    GRAFICACIN

    EJECUCIN DEL ALGORITMO DDA

    DOCENTE

    LIC. DIANA MARICELA GONZLEZ DELGADO

    PRESENTA:

    HERNNDEZ JACINTO MARCO ANTONIO

    LARIOS VZQUEZ EDGAR

    LIBRES, PUEBLA, 11 DE FEBRERO 2012

  • 1.- Fundamento terico del algoritmo DDA.

    La computacin grafica en 2D corresponde al conjunto de tcnicas que tienen

    como objeto la generacin de modelos esto se da mediante modelos

    geomtricos bidimensionales. De esta manera estas tcnicas son empleadas

    en interfaces graficas de usuario. Los grficos vectoriales y de rasterizacin

    conforman las principales categoras de computacin grafica en 2D.

    Algoritmo DDA para el trazo de lneas.

    La ecuacin de la insercin de la pendiente cartesiana de una lnea es:

    (1) y = m x + b

    Donde:

    m = Pendiente de la lnea.

    b = Insercin de y.

    Dado que los extremos de un segmento de lnea se especifica en las

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

    y la insercin de y en b con los siguientes clculos:

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

    (3) b = y1 m x1

    Para cualquier x dentro del intervalo x a lo largo de una lnea, se puede

    calcular el intervalo correspondiente a y a partir de la ecuacin (2) como:

    (4) y = m x

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

    una y especfica como:

    (5) x = y / m

    Si m1, la lnea es mas horizontal que vertical.

  • Segn tiende a infinito a m, la lnea tiende a ser vertical.

    El siguiente paso es efectuar un muestreo de la lnea de puntos discretos

    correspondientes a los pixeles ms cercanos.

    CODIGO DE EJEMPLOS DE TRAZO DE LINEAS PUNTEADAS DE LA

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

    {

  • //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)

    {

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

    }

    }

    }

  • CODIGO DE EJEMPLOS DE TRAZO DE LINEAS CON GROSOR DE LA

    LIBRERA 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.glCol