Professional Documents
Culture Documents
y = Yfin yinicio.
ALGORITMO:
#include <stdlib.h>
#include <math.h>
inline int round (const float a) { return int (a + 0.5); }
void lineDDA (int x0, int y0, int xEnd, int yEnd) {
int dx = xEnd - x0, dy = yEnd - y0, steps, k;
float xIncrement, yIncrement, x = x0, y = y0;
if (fabs (dx) > fabs (dy))
steps = fabs (dx);
else
steps = fabs (dy);
xIncrement = float (dx) / float (steps);
yIncrement = float (dy) / float (steps);
setPixel (round (x), round (y));
for (k = 0; k < steps; k++) {
x += xIncrement;
y += yIncrement;
setPixel (round (x), round (y));
}
}
Algoritmo de Bresenham
El algoritmo de Bresenham se generaliza para lneas con una pendiente arbitraria al considerar
la simetra entre los diversos octantes y cuadrantes del plano de X Y.
Para una lnea con una pendiente m > 1, intercambiamos las funciones de las direcciones de X
y Y, pasamos a lo largo de Y en pasos unitarios y calculamos los valores sucesivos de X que se
aproximan ms a la trayectoria de la lnea. Asimismo, podemos revisar el programa para trazar
pxeles iniciando desde cualquier extremo.
Si se inicia desde el extremo izquierdo (x0, y0) de una lnea determinada, se pasa a cada
columna sucesiva y se traza el pixel cuyo valor de y se aproxima ms a la trayectoria de la lnea
de rastreo. Si suponemos que se debe desplegar el pixel en (xk, yk), a continuacin se necesita
decidir que pixel se debe desplegar en la columna xk+1. Las alternativas son los pixeles (xk+1,
yk), y (xk+1,yk+1).
EJEMPLO:
Trazamos el punto inicial (x0,y0) = (20,10) y determinamos las posiciones de pixel sucesivos a
lo largo de la trayectoria de la lnea a partir del parmetro de decisin como:
ALGORITMO :
#include <stdlib.h>
#include <math.h>
void lineBres (int x0, int y0, int xEnd, int yEnd) {
int dx = fabs (xEnd - x0), dy = fabs(yEnd - y0);
int p = 2 * dy - dx;
int twoDy = 2 * dy, twoDyMinusDx = 2 * (dy - dx);
int x, y;