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.
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
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;
}
}
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:59ChineseGeek he actualizado el post con la respuesta a tu pregunta
14 de abril de 2010, 17:52Thank u very much!!!
14 de abril de 2010, 19:29necesito ayuda pero usando la Libreria sdl y devc..
10 de enero de 2012, 2:00Podrias ayudarme...
Que librerías hay que instalar para que reconozca la función putpixel?
19 de febrero de 2013, 18:51Que librerías hay que instalar para que reconozca la función putpixel?
19 de febrero de 2013, 18:51yo utilizo estas librerias en c++ (son básicas)
9 de marzo de 2013, 19:38#include
#include
#include
ammm pues la verdad soy nub programando pero me corre todo bien con estas librerias! Suerte!
Publicar un comentario
Deja tu opinión realizando un comentario interesante. Cualquier intento de Spam no será admitido.