Algorytm Bresenhama służy do rasteryzacji krzywych płaskich, czyli do jak najlepszego ich obrazowania na siatce pikseli. Jack Bresenham w 1965 roku opracował metodę rasteryzacji odcinków, którą następnie przystosowano do rysowania obiektów innego rodzaju (okręgów czy elips).
Siła algorytmu tkwi w prostocie; koszt postawienia jednego piksela to porównanie i jedno dodawanie (dla odcinków) lub porównanie i dwa dodawania (dla okręgów i elips), ponadto algorytm wykonuje obliczenia na liczbach całkowitych, które są bardzo szybkie na wszystkich mikroprocesorach.
Metoda pozwala w bardzo prosty sposób wybierać, które piksele leżą najbliżej rasteryzowanego obiektu (np. odcinka). Zakładając, że poprzednio algorytm zapisał piksel o współrzędnych
w kolejnym kroku algorytm może zapisać piksel albo
(ruch poziomy), albo
(ruch ukośny) – wybór determinuje znak tzw. zmiennej decyzyjnej, której wartość jest po każdym kroku aktualizowana. Aktualizacja polega na dodaniu pewnych wartości, będących w przypadku odcinka stałymi, zaś dla okręgu i elipsy wartościami zmieniającymi się z każdym krokiem:
- D = zmienna decyzyjna
= przyrost D przy ruchu w lewo
= przyrost D przy ruchu ukośnym
= przyrost
przy ruchu w lewo (dla odcinka = 0)
= przyrost
przy ruchu w lewo (dla odcinka = 0)
= przyrost
przy ruchu ukośnym (dla odcinka = 0)
= przyrost
przy ruchu ukośnym (dla odcinka = 0)
- powtarzaj
- zapisz piksel
![{\displaystyle (x,y)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/41cf50e4a314ca8e2c30964baa8d26e5be7a9386)
- jeśli
– ruch w lewo
– aktualizacja zmiennej decyzyjnej
– aktualizacja parametrów pomocniczych
– aktualizacja parametrów pomocniczych
- w przeciwnym razie
– ruch ukośny
![{\displaystyle y:=y+1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/32a84b60a471829f43c898ab913553a63adafb86)
– aktualizacja zmiennej decyzyjnej
– aktualizacja parametrów pomocniczych
– aktualizacja parametrów pomocniczych