Algoritmo DDA - Dibujar línea - Programación C

martes, 13 de abril de 2010

Hoy os presentamos una función de C que dibuja un línea en pantalla usando el algoritmo DDA. Puedes tomártelo como un ejercicio de C como en post anteriores o simplemente ir al resultado.

Explicación del algoritmo

Es un algoritmo que se basa  en el  cálculo  y la evaluación de un DeltaX (X) y un DeltaY(Y). Por medio de las siguientes ecuaciones:


DeltaX = DeltaY / m
DeltaY = m * DeltaX


Se efectúa un muestreo de la línea en intervalos unitarios en una coordenada y se determinan los valores enteros correspondientes más próximos a la trayectoria de la línea para la siguiente coordenada.

Se aceptan como datos de entradas las dos posiciones de los pixeles correspondientes a los extremos de la línea  P1(Xinicial,Yinicial) y P2(Xfinal,Yfinal). Las diferencias horizontal y vertical entre las posiciones de los extremos dados, se asignan a las varialbles DeltaX y DeltaY respectivamente. La diferencia con la mayor magnitud determina el valor del parámetro Pasos. Se procede a determinar la compensación necesaria(incremento), para generar la posición del pixel siguiente a lo largo de la trayectoria de la línea. Luego, se ilumina la posición en la pantalla. y  se repite este proceso cíclico Pasos Veces, hasta obtener la línea deseada.

Pseucodigo

Leer Coordenadas P1(Xinicial, Yinicial)
Leer Coordenadas P2(Xfinal,Yfinal)
Asignar a  DeltaX la diferencia de Xfinal - Xinicial
Asignar a  DeltaY la diferencia de Yfinal - Yinicial

Si ABS( DeltaX) > ABS(DeltaY)
      Asignar a Pasos el ABS(DeltaX)
De lo contrario
      Asignar a Pasos el ABS(DeltaY)

Asignar a Xincremento el resultado de DeltaX / Pasos
Asignar a Yincremento el resultado de DeltaY / Pasos
Asignar a X el valor de Xinicial
Asignar a Y el valor de Yinicial
Iluminar pixel en coordenada X,Y

Desde k=1 hasta Pasos
    Asignar a X la suma de X + Xincremento

Asignar a Y la suma de Y + Yincremento
Iluminar pixel en Coodenada X,Y
Fin de Algoritmo(DDA)

Ejercicio:
Escribe un programa que dibuje una línea en pantalla.

Sigue leyendo para ver el resultado:
Para ejecutar el ejemplo es necesario tener la librería "graphics.h" de Borland.


#include <dos.h>

#include <stdio.h>

#include <graphics.h>

#include <math.h>

void DDA (int x1,int y1,int x2,int y2)

{

   float ax,ay,x,y,luz;

   int i;



   if(abs(x2-x1)>=abs(y2-y1))

   luz=abs(x2-x1);

   else

   luz=abs(y2-y1);

   ax=(x2-x1)/luz;

   ay=(y2-y1)/luz;



   x=(float)x1;

   y=(float)y1;



   i=1;

   while(i<=luz)

   {

        putpixel((319+floor(x)),(239-floor(y)),9);

        x=x+ax;

        y=y+ay;

        i=i+1;

   }

}

Artículos relacionados


Comments

7 Responses to “ Algoritmo DDA - Dibujar línea - Programación C ”
Post a Comment | Enviar comentarios ( Atom )

Que librerías hay que instalar para que reconozca la función putpixel?

14 de abril de 2010, 2:59

ChineseGeek he actualizado el post con la respuesta a tu pregunta

14 de abril de 2010, 17:52
Anónimo dijo...

necesito ayuda pero usando la Libreria sdl y devc..
Podrias ayudarme...

10 de enero de 2012, 2:00
Anónimo dijo...

Que librerías hay que instalar para que reconozca la función putpixel?

19 de febrero de 2013, 18:51
Anónimo dijo...

Que librerías hay que instalar para que reconozca la función putpixel?

19 de febrero de 2013, 18:51
Anónimo dijo...

yo utilizo estas librerias en c++ (son básicas)
#include
#include
#include

ammm pues la verdad soy nub programando pero me corre todo bien con estas librerias! Suerte!

9 de marzo de 2013, 19:38

Publicar un comentario en la entrada

Deja tu opinión realizando un comentario interesante. Cualquier intento de Spam no será admitido.