El algoritmo de línea de Bresenham se puede usar para determinar qué puntos de una cuadrícula de trama se deben trazar para lograr una aproximación visual adecuada de un segmento de línea.
El algoritmo cubre la rasterización de una línea definida por el origen y los puntos finales en un espacio de coordenadas donde el origen está en la esquina superior izquierda. Se presume que las coordenadas enteras se asignan a centros de píxeles. Notablemente, la forma básica del algoritmo solo cubre un octavo del círculo: aquel en el que la línea tiene coordenadas X e Y crecientes pero una pendiente negativa con un valor absoluto menor que 1. Todos los demás octantes pueden derivarse como simples transformaciones de este octante básico
En psuedocode, este formulario básico se ve así:
void DrawLine(Point origin, Point endpoint, Bitmap surface) {
deltaX = endpoint.X - origin.X
deltaY = endpoint.Y - origin.Y
error = 0
// Note the below fails for completely vertical lines.
deltaError = absoluteValue(deltaY / deltaX)
Y = origin.Y
for (X from origin.X to endpoint.X) {
surface.PlotPixel(X, Y)
error = error + deltaError
if (error >= 0.5) {
++Y;
error -= 1.0
}
}
}
El sitio web de Rosetta Code tiene una colección de implementaciones concretas en una variedad de idiomas .
También te puede interesar el algoritmo de línea de Wu , que permite el suavizado.