Thuật toán đường thẳng của Bresenham có thể được sử dụng để xác định điểm nào trong lưới raster để vẽ đồ thị để đạt được xấp xỉ trực quan phù hợp của một đoạn đường.
Thuật toán bao gồm quá trình rasterization của một dòng được xác định bởi điểm gốc và điểm cuối trong một không gian tọa độ trong đó điểm gốc nằm ở phía trên bên trái. Các tọa độ số nguyên được cho là ánh xạ tới các tâm pixel. Đáng chú ý, dạng cơ bản của thuật toán chỉ bao gồm một quãng tám của vòng tròn: dạng mà đường thẳng có tọa độ X và Y tăng nhưng độ dốc âm có giá trị tuyệt đối nhỏ hơn 1. Tất cả các quãng tám khác có thể được suy ra dưới dạng biến đổi đơn giản của điều này quãng tám cơ bản.
Trong psuedocode, hình thức cơ bản này trông giống như:
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
}
}
}
Trang web Rosetta Code có một bộ sưu tập các triển khai cụ thể bằng nhiều ngôn ngữ .
Bạn cũng có thể quan tâm đến thuật toán dòng của Wu , cho phép khử răng cưa.