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
}
}
}
}
martes, 10 de abril de 2007
Suscribirse a:
Comentarios de la entrada (Atom)
No hay comentarios.:
Publicar un comentario