U svakom koraku C prelazi na onaj od tri susedna piksela koji ima najmanju apsolutnu vrednost greške.
Zaustavljamo se kad bude C=B.
Implementacija:
U toku izvršavanja u promenljivoj err pamtimo err(C+(1,1)).
Početna vrednost za err, kada je C=A: err=err(A+(1,1))=Dx−Dy
Povećavamo y (idemo gore ili gore-desno) ako ∣err(C+(1,1))∣<∣err(C+(1,0))∣ ⇔∣err∣<∣err−Dx∣ ⇔2err<Dx
Povećavamo x (idemo desno ili gore-desno) ako ∣err(C+(1,1))∣<∣err(C+(0,1))∣ ⇔∣err∣<∣err+Dy∣ ⇔2err>−Dy
LineDrawing.drawLineBresenham
voiddrawLineBresenham(PixelWriter pw, int ax, int ay, int bx, int by){
int dx = Math.abs(bx - ax), dy = Math.abs(by - ay);
int sx = ax < bx ? 1 : -1 , sy = ay < by ? 1 : -1;
int cx = ax , cy = ay;
int err = dx - dy;
while (cx != bx || cy != by) {
pw.setColor(cx, cy, Color.WHITE);
int err2 = 2 * err;
if (err2 > -dy) {
cx += sx;
err -= dy;
}
if (err2 < dx) {
cy += sy;
err += dx;
}
}
pw.setColor(cx, cy, Color.WHITE);
}
Rasterizacija duži
Xiaolin Wu algoritam
Pikseli mogu imati bilo koju nijansu (providnost). Nijansa zavisi od toga "koliko je linija blizu centra piksela".
Brz, ali sporiji od Brezenhamovog algoritma. Perceptualno prijatniji od Brezenhama. Dozvoljava realne koordinate krajeva duži
Na slici gore: Brezenham
Na slici dole: Xiaolin Wu
---
# Anti-aliasing



Postupak umanjenja stepeničastih efekata.
- Vrste:
- **Geometrijski pristup** - Računa koliki deo piksela je zauzet objektom koji se iscrtava. Samo za jednostavne objekte.
- **Fast-aproximate** - Primenjuje zamućivanje ivica na već iscrtanoj slici.
- **Multi-sampling** - Vrednost svakog piksela se postavlja na prosek izračunatih uzoraka unutar tog piksela. Postoje razni metodi za odabir uzoraka.
<-- Ovo se izgleda zove super-sampling a multi-sampling je nesto drugo? ->
- **Temporal** - Pikseli menjaju boju u svakom frejmu kako bi se u proseku dobila željena boja
<-- Ovo nije temporal anti-aliasing, videti wikipedia članak. (Ovo je temporal dithering valjda.) ->
💻 `Antialiasing`
---
