martes, 10 de abril de 2007

Tarea 5

Algoritmo de Bresenham pata rectas con pendientes mayores a uno

Primero calculamos los errores , en clase se vio para rectas con pendientes menores a 1, en el caso de las pendientes mayores a uno se evalúan dos puntos diferentes, el trasladado en el norte y el del noreste

F(x + 1/2, y +1) = A(x +1/2) + B (y+1) + C= Ax + 1/2A + By + B + C

Si la dirección es N

F(x + 1/2, y +2) = A(x +1/2) + B (y+2) + C= Ax + 1/2A + By + 2B + C

Error en N

DN = Ax + 1/2A + By + 2B + C – (Ax + 1/2A + By + B+ C) = B

Si la dirección es NE

F(x + 3/2, y +2) = A(x +3/2) + B (y+2) + C= Ax + 3/2A + By + 2B + C

Error en NE

DN = Ax + 3/2A + By + 2B + C – (Ax + 1/2A + By + B + C) = A + B

El delta cero es

F(x0 + 1/2, y0 +1) = A(x0 +1/2) + B (y0+1) + C= Ax0 + 1/2A + By0 + B + C =
= 1/2 A + B

Algoritmo:

void lineadeBresenham(int x0, y0, x1, y1)
{
int Dx = x1 – x 0;
int Dy = y1 – y 0;
int m = Dy / Dx;
int x = x0;
int y = y0;
int D0a = 2 Dy – Dx;
int D0b = Dy – 2Dx;
int DE = 2 Dy;
int DNE = 2 (Dy-Dx);
int DN = -2DX;
int D;
if (m < = 1)
{
D = D0a
While (x != x1){
If (D <= 0)
{
Punto (x,y);
x = x +1;
D = D + DE;
}
else
{
Punto (x,y);
x = x +1;
y = y + 1;
D = D + DNE
}
}
}
else
{
D = D0b;
While (y != y1){
If (D <= 0)
{
Punto (x,y);
y = y +1;
D = D + DN;
}
else
{
Punto (x,y);
x = x +1;
y = y + 1;
D = D + DNE
}
}
}
}

No hay comentarios.: