Алгоритм линии Брезенхэма можно использовать для определения точек в растровой сетке для построения соответствующей визуальной аппроксимации отрезка линии.
Алгоритм охватывает растеризацию линии, определяемой началом координат и конечными точками в координатном пространстве, где начало координат находится слева вверху. Предполагается, что целочисленные координаты сопоставляются с центрами пикселей. Примечательно, что базовая форма алгоритма охватывает только один октант круга: тот, в котором линия имеет увеличивающиеся координаты X и Y, но отрицательный наклон с абсолютным значением меньше 1. Все остальные октанты могут быть получены как простые преобразования этого основной октант.
В psuedocode эта базовая форма выглядит так:
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
}
}
}
На веб-сайте Rosetta Code есть коллекция конкретных реализаций на разных языках .
Вы также можете быть заинтересованы в строковом алгоритме Ву , который допускает сглаживание.