Dibujo lineal de punto medio
Algoritmo básico: el
punto de píxel actual es (xp, yp), el siguiente punto de píxel es P1 o P2, establezca M = (xp + 1, yp + 0.5), que es el
punto medio entre p1 y p2 , Q es la línea recta ideal yx = La intersección de xp + 1 líneas verticales. Compare las coordenadas y de Q y M.
Cuando M está por debajo de Q, P2 debería ser el siguiente punto de píxel;
M está por encima de Q y P1 debería tomarse como el siguiente punto
Construya el discriminante: d = F (M) = F (xp + 1, yp + 0.5) = a (xp + 1) + b (yp + 0.5) + c donde a = y0-y1,
b = x1-x0, c = x0y1-x1y0
Cuando d <0, M está por debajo de L (punto Q), toma la P2 superior derecha como el siguiente píxel;
cuando d> 0, M está por encima de L (punto Q), toma la P1 derecha como la siguiente Píxeles;
cuando d = 0, se puede seleccionar P1 o P2, y se acuerda que P1 sea el próximo píxel;
Si el píxel actual está en d³0, se toma el píxel derecho positivo P1 (xp + 1, yp). Para determinar la siguiente posición de píxel, d1 = F (xp + 2, yp + 0.5) = a (xp + 2 ) + b (yp + 0.5) = d + a; el incremento es a
Si d <0, tome el píxel superior derecho P2 (xp + 1, yp + 1). Para juzgar el siguiente píxel, necesitamos calcular
d2 = F (xp + 2, yp + 1.5) = a (xp + 2) + b (yp + 1.5) + c = d + a + b; el incremento es a + b
** El dibujo lineal comienza desde (x0, y0), el valor inicial de d d0 = F (x0 + 1, y0 + 0.5) = F (x0, y0) + a + 0.5b = a + 0.5b.
D se puede utilizar para deshacerse del lugar decimal de 2d, la eficiencia **
Ejemplo: (. 5, 2) segmentos lineales con línea de puntos en el método de dibujo Pl (0, 0) -P2
A = Y2-Y1 = X1-X2 = -2 B = 5
d0 = 2a + b = 1 d1 = 2a = -4 d2 = 2 (a + b) = 6
algoritmo :
void Midpoint Line (int x0,int y0,int x1, int y1,int color)
{
int a, b, d1, d2, d, x, y;
a=y0-y1, b=x1-x0, d=2*a+b;
d1=2*a, d2=2* (a+b);
x=x0, y=y0;
drawpixel(x, y, color);
while (x<x1)
{
if (d<0)
{
x++, y++, d+=d2;
}
else
{
x++, d+=d1;
}
drawpixel (x, y, color);
} /* while */
} /* mid PointLine */