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;
}
}
Que librerías hay que instalar para que reconozca la función putpixel?
ResponderEliminarChineseGeek he actualizado el post con la respuesta a tu pregunta
ResponderEliminarThank u very much!!!
ResponderEliminarnecesito ayuda pero usando la Libreria sdl y devc..
ResponderEliminarPodrias ayudarme...
Que librerías hay que instalar para que reconozca la función putpixel?
ResponderEliminarQue librerías hay que instalar para que reconozca la función putpixel?
ResponderEliminaryo utilizo estas librerias en c++ (son básicas)
ResponderEliminar#include
#include
#include
ammm pues la verdad soy nub programando pero me corre todo bien con estas librerias! Suerte!