You are on page 1of 3

Es un algoritmo que se basa en el clculo y la evaluacin de un DeltaX (X) y un DeltaY(Y).

Por medio de las siguientes ecuaciones:


DeltaX = DeltaY / m DeltaY = m * DeltaX

Se efecta un muestreo de la lnea en intervalos unitarios en una coordenada y se determinan los valores enteros correspondientes ms prximos a la trayectoria de la lnea para la siguiente coordenada.

Se aceptan como datos de entradas las dos posiciones de los pixeles correspondientes a los extremos de la lnea 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 parmetro Pasos. Se procede a determinar la compensacin necesaria(incremento), para generar la posicin del pixel siguiente a lo largo de la trayectoria de la lnea. Luego, se ilumina la posicin en la pantalla. y se repite este proceso cclico Pasos Veces, hasta obtener la lnea 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 lnea en pantalla. Sigue leyendo para ver el resultado: Para ejecutar el ejemplo es necesario tener la librera "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; } }

You might also like